【问题标题】:HTTP GET request with a TCP socket doesn't return anything带有 TCP 套接字的 HTTP GET 请求不返回任何内容
【发布时间】:2016-03-03 04:14:28
【问题描述】:

我在 .NET 中有这段代码:

        Socket Connector = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        string IP = "198.41.208.139";
        Connector.Connect(new IPEndPoint(IPAddress.Parse(IP), 80));
        Connector.Send(Encoding.ASCII.GetBytes("GET / HTTP/1.1"));
        byte[] Data = new byte[1024];
        Connector.Receive(Data);

IP 属于http://reddit.com/,但 GET 请求不返回任何内容。 Receive 方法无限期地阻塞程序。当我尝试使用 http://imgur.com/http://youtube.com/ 网站时发生了同样的事情

为什么会发生这种情况,我该如何解决?

【问题讨论】:

    标签: .net http tcp get


    【解决方案1】:

    您需要按照RFC2616 HTTP 1.1"\r\n\r\n" 附加到请求中。

    此外,对于 HTTP 1.0+,您应该添加一个 Host: 标头(1.1 的强制性,1.0 推荐):

    Connector.Send(Encoding.ASCII.GetBytes("GET / HTTP/1.1\r\nHost: reddit.com\r\n\r\n"));
    

    【讨论】:

    • 成功了,非常感谢!你的回答会在8分钟后被接受,到时候我会接受的。
    • 不客气!如果其他人给了你一个更好的答案,你应该毫不犹豫地接受它:-)
    • 实际上,使用 HTTP/1.1 还需要在请求中添加 Host 标头。至少标准是这样说的,虽然并不是所有的服务器都需要它。
    猜你喜欢
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多