Я пытаюсь сделать HTTP-запрос/ответ, используя сокеты в C#. Появится запрос 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, что означает «ОК», то он должен что-то сделать. Вероятно, проблема на стороне сервера? Вы владеете услугой? Есть ли возможность просмотреть @ журнал или отследить код оттуда? –
@ Теничный, спасибо за ответ. Сервиз не мой. Я много раз запускал код для разных сервисов. Есть senate.gov, ex.ua, mit.edu, google.com, fs.to и другие и другие из них. Все эти запросы получили ответы с кодом 200OK или 302Found или 301 и без тела сообщения. Поэтому я не уверен, что речь идет о проблеме на стороне сервера. – Yevtukhoff