我試圖使用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