我试图使用C#中的套接字发出HTTP请求/响应。 GET请求出现在下面。空http响应正文
StringBuilder sb = new StringBuilder();
sb.AppendFormat("GET http://{0}/ HTTP/1.1\r\n", hostname);
sb.AppendFormat("Host: {0}\r\n", hostname);
sb.Append("Connection: keep-alive\r\n");
sb.Append(@"Accept:text/html,*/*");
sb.Append("\r\n\r\n");
其中主机是像 'mit.edu' 或 'facebook.com' 或 'google.com' 或其他任何东西。由于一些奇怪的原因,我只有一个状态行(带有200个状态码)和标题作为http响应。但在响应没有邮件正文:attached srceenshot of my console app
下面是与插座进行所有操作,让http请求的方法:
public static void DoHttpGetRequest(String hostname, Int16 port = 80) {
IPHostEntry ipHostEntry = Dns.GetHostEntry(hostname);
IPAddress ipAdress = ipHostEntry.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAdress, port);
Socket socket = new Socket(ipAdress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(ipEndPoint);
String request = CreateRequest(hostname);
Byte[] byteRequest = Encoding.UTF8.GetBytes(request);
Byte[] byteResponse = new Byte[1000];
int bytesSent = socket.Send(byteRequest);
int bytesReceive = socket.Receive(byteResponse);
Console.WriteLine(request);
Console.WriteLine();
Console.WriteLine(Encoding.UTF8.GetString(byteResponse, 0, bytesReceive));
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
我首先想到的是,插座没有收到全来自服务器的响应。在这种情况下,我仍然不知道如何解决问题。
那么发生了什么事?错误在哪里?
不知道你在这里打电话给什么样的服务,但如果它给你的http代码200这意味着好,那么它一定做了一些事情。可能是服务器端的问题? 你是否拥有这项服务?有没有机会查看@日志或从那里跟踪代码? –
@Tendious,thanx为您的答案。服务不是我的。我为很多不同的服务运行了很多次代码。有senate.gov,ex.ua,mit.edu,google.com,fs.to和其他等。所有这些请求得到了他们的代码200OK或302Found或301和没有消息正文的回应。所以我不确定它是关于服务器端的问题。 – Yevtukhoff