【问题标题】:TcpClient 505 HTTP Version Not SupportedTcpClient 505 HTTP 版本不支持
【发布时间】:2021-10-24 17:20:41
【问题描述】:
var client = new TcpClient("www.example.com", 80);
var message = @"GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: close\r\n\r\n";
var stream = client.GetStream();
var data = Encoding.ASCII.GetBytes(message);
await stream.WriteAsync(data, 0, data.Length);
data = new byte[256];
var bytes = await stream.ReadAsync(data, 0, data.Length);
var responseData = Encoding.ASCII.GetString(data, 0, bytes);

第一行响应:HTTP/1.0 505 HTTP Version Not Supported

注意:使用 HttpClient/HttpWebRequest 不是我的用例的选项。这是一个超出这个特定问题范围的长篇故事。

编辑:我也试过了

var message = @"GET / HTTP/1.0\r\nHost: www.example.com\r\nConnection: close\r\n\r\n";

【问题讨论】:

  • 可能服务器只支持HTTP/2.0?可能不相关,但我建议使用\n 而不是\r\n
  • @Llama 好吧,我试着确定一下。同样的错误。也试过用\n代替\r\n,结果一样。
  • @Llama:那将是无效的。 RFC2616 规定使用 CRLF,而不是 LF。
  • @Jon 真的吗?哦。已注明。
  • 你试过GET/ HTTP/1.0吗?因为 1.1 似乎“不支持”...

标签: c# tcpclient


【解决方案1】:

比较您发送的内容:

反对您要发送的内容:

归结为错误地将 message 分配给字符串文字。您需要一个常规字符串:

var message = "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: close\r\n\r\n";

否则,您发送的内容实际上是错误的:GET / HTTP/1.1\\r\\nHost: example.com\\r\\nConnection: close\\r\\n\\r\\n

【讨论】:

    猜你喜欢
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2019-03-10
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    相关资源
    最近更新 更多