簡體   English   中英

HttpWebRequest引發System.Net.WebException Section = ResponseStatusLine

[英]HttpWebRequest throws System.Net.WebException Section=ResponseStatusLine

我寫了一個簡單的httpserver,打算與HttpRequest / Response進行交互。 服務器收到請求並且解析很好,但是當我寫回時我得到了異常

System.Net.WebException: Der Server hat eine Protokollverletzung ausgeführt. Section=ResponseStatusLine
   bei System.Net.HttpWebRequest.GetResponse()

我的服務器代碼回寫

TcpClient client = ...;
_stream = _client.GetStream();


// make sure "\r\n" is used as line ending, because it may be different on different OS
_output = new StreamWriter(_stream, Encoding.UTF8) { NewLine = "\r\n" };

length = 0;
code = 200;
message = "OK";
_output.WriteLine("HTTP/1.1 " + code + " " + message);
_output.WriteLine("Server: My Server");
_output.WriteLine("ContentLength: " + length);
_output.WriteLine("Connection: " + (_keepAlive ? "Keep-Alive" : "Close"));
_output.WriteLine();
_output.Flush();

客戶代碼

var request = (HttpWebRequest)WebRequest.Create("http://127.0.0.1:8080/foo");
request.KeepAlive = false;
request.ServicePoint.Expect100Continue = false;

using (var res = request.GetResponse())   // throws here
{
}

任何想法?

更新:正如喬恩提到的第一個錯誤已刪除,但仍然無法正常工作

備用客戶代碼

using (var client = new TcpClient())
{
    client.Connect(new IPEndPoint(IPAddress.Loopback, 8080));
    using (var stream = client.GetStream())
    {
        var writer = new StreamWriter(stream);
        writer.WriteLine("GET /foo HTTP/1.1");
        writer.WriteLine("HOST:127.0.0.1");
        writer.WriteLine("Connection:Close");
        writer.WriteLine();
        writer.Flush();

        var response = new StreamReader(stream).ReadToEnd();
        foreach (var c in response)
        {
            if (char.IsControl(c))
                Console.Write("'{0}'" , (int)c);
            else
                Console.Write(c);
        }
    }
}

退貨

HTTP/1.1 200 OK'13''10'Server: My custom Server'13''10'ContentLength: 0'13''10'Connection: Close'13''10''13''10'

好吧,這很有可能始於:

_output = new StreamWriter(_stream, Encoding.UTF8) { NewLine = "\n\r" };

我認為您的意思是\\r\\n而不是\\n\\r

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM