【发布时间】:2017-08-16 08:43:27
【问题描述】:
当我使用以下代码在 C# 中使用套接字发送 HTTP GET 请求时
IPEndPoint RHost = new IPEndPoint(IPAddress.Parse("xxx.xxx.xxx.xxx"), 80);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(RHost);
String req = "GET / HTTP/1.1\r\nHost: awebsite.com\r\n\r\n";
socket.Send(Encoding.ASCII.GetBytes(req), SocketFlags.None);
int bytes = 0;
byte[] buffer = new byte[256];
var result = new StringBuilder();
do
{
bytes = socket.Receive(buffer, 0, buffer.Length, SocketFlags.None);
result.Append(Encoding.ASCII.GetString(buffer, 0, bytes));
}
while (bytes > 0);
我明白了
System.Net.Sockets.SocketException: '一个现有的连接是 被远程主机强行关闭'
当我在请求中添加Connection: Close 标头时,它可以正常工作。
但是使用 Burp Suite 中的中继器工具,我可以在不设置 Connection: Close 标头的情况下发送和接收来自服务器的响应。
注意事项:
- 我必须使用套接字。
- 我遇到这个问题的网站很少,而不是每个网站
【问题讨论】:
-
您是否尝试设置超时?例如
socket.ReceiveTimeout = 1000;?
标签: c# sockets httprequest