Httplistener Server-Header c #
-
06-07-2019 - |
Frage
Ich versuche, einen C # http-Server für ein persönliches Projekt zu schreiben, ich frage mich, wie ich die Server-Header von Microsoft-HTTPAPI zurück ändern kann / 2.0, um etwas anderes?
public class HttpWebServer
{
private HttpListener Listener;
public void Start()
{
Listener = new HttpListener();
Listener.Prefixes.Add("http://*:5555/");
Listener.Start();
Listener.BeginGetContext(ProcessRequest, Listener);
Console.WriteLine("Connection Started");
}
public void Stop()
{
Listener.Stop();
}
private void ProcessRequest(IAsyncResult result)
{
HttpListener listener = (HttpListener)result.AsyncState;
HttpListenerContext context = listener.EndGetContext(result);
string responseString = "<html>Hello World</html>";
byte[] buffer = Encoding.UTF8.GetBytes(responseString);
context.Response.ContentLength64 = buffer.Length;
System.IO.Stream output = context.Response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
Listener.BeginGetContext(ProcessRequest, Listener);
}
}
Lösung
Die Httplistener-Klasse kapselt die native API, HttpSendHttpResponse Funktion , die wie in der Verbindung angegeben wird den absurden Text an den Server-Header-Informationen immer anhängen.
Es gibt keinen Weg, wie das beheben, wenn Sie Ihre Httplistener von Grund auf neu codieren möchten.
Andere Tipps
Ich weiß, dass ich ein wenig zu spät bin, aber ich habe versucht, erst vor kurzem die gleiche Sache zu tun und ich auf eine Lösung aus Versehen kam, das funktioniert, aber ich bin nicht sicher, ob es irgendwelche Auswirkungen hat.
Response.Headers.Add("Server", "\r\n\r\n");
Ich habe versucht, aber es kommt wieder mit My Personal Server Microsoft-HTTPAPI / 2.0
Ich habe auch ohne Erfolg verwendet, setzen, entfernen, hinzufügen, addHeader
private void ProcessRequest(IAsyncResult result)
{
HttpListener listener = (HttpListener)result.AsyncState;
HttpListenerContext context = listener.EndGetContext(result);
string responseString = "<html>Hello World</html>";
byte[] buffer = Encoding.UTF8.GetBytes(responseString);
context.Response.ContentLength64 = buffer.Length;
//One
context.Response.AddHeader("Server", "My Personal Server");
//Two
context.Response.Headers.Remove(HttpResponseHeader.Server);
context.Response.Headers.Add(HttpResponseHeader.Server, "My Personal Server");
//Three
context.Response.Headers.Set(HttpResponseHeader.Server, "My Personal Server");
System.IO.Stream output = context.Response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
Listener.BeginGetContext(ProcessRequest, Listener);
}
Danke Elia