문제

개인 프로젝트를 위해 C# HTTP 서버를 작성하려고합니다. 반환 된 서버 헤더를 Microsoft-HTTPAPI/2.0에서 다른 것으로 변경할 수있는 방법이 궁금합니다.

 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);
        }
    }
도움이 되었습니까?

해결책

httplistener 클래스는 기본 API를 캡슐화하고 httpsendhttpresponse 함수, 링크에 명시된 바와 같이, 항상 서버 헤더 정보에 대한 터무니없는 텍스트가 추가됩니다.

httplistener를 처음부터 코딩하지 않는 한이 문제를 해결하는 방법은 없습니다.

다른 팁

나는 조금 늦었다는 것을 알고 있지만 최근에 똑같은 일을하려고 노력하고 있었고 실수로 작동하는 해결책을 발견했지만 반향이 있는지 확실하지 않습니다.

Response.Headers.Add("Server", "\r\n\r\n");

시도했지만 개인 서버 Microsoft-HTTPAPI/2.0과 함께 돌아옵니다.

나는 또한 성공, 설정, 제거, 추가, 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);
        }

감사합니다 엘리야

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top