У меня странная проблема при попытке получить полный ответ с веб-страницы, используя TcpClient
, на которую я отправляю POST. Вот код:
byte[] RecvBufferxxxx = new byte[4096];
var returnData = "";
var uri = new Uri(string.Format(core.serverAuth, "app_data"));
var head = new WebHeaderCollection();
head[HttpRequestHeader.Host] = uri.Host;
head[HttpRequestHeader.Connection] = "keep-alive";
head[HttpRequestHeader.AcceptEncoding] = "deflate";
using (var client = new TcpClient(uri.Host, 443))
{
client.SendTimeout = 10000;
client.ReceiveTimeout = 10000;
using (SslStream s = new SslStream(client.GetStream(), false,
IgnoreCertificateErrorHandler, null))
{
s.AuthenticateAsClient(uri.Host, null, SslProtocols.Tls, false);
var hhd = "POST " + uri.PathAndQuery + " HTTP/1.0\r\n" + head;
var bts = Encoding.ASCII.GetBytes(hhd);
s.Write(bts, 0, bts.Length);
s.Flush();
s.ReadByte();
var n = s.Read(RecvBufferxxxx, 0, RecvBufferxxxx.Length);
// var tmp = Encoding.ASCII.GetString(RecvBufferxxxx, 0, n);
// ANOTHER CALL SAMPLE
// n = s.Read(RecvBufferxxxx, 0, RecvBufferxxxx.Length);
using (MemoryStream ms = new MemoryStream(RecvBufferxxxx, 0, n))
{
ms.ReadByte();
ms.ReadByte();
using (DeflateStream df = new DeflateStream(ms,
CompressionMode.Decompress))
{
using (StreamReader rd = new StreamReader(df))
{
returnData = rd.ReadToEnd();
}
}
}
}
}
Этот код работает, но он получает только заголовки ответа, мне нужно сделать еще один вызов, чтобы получить тело ответа, и я не знаю почему.
Ответ от моего сервера и очень короткий.
Раньше я использовал только Socket
, и он получал все за один вызов, но теперь я переписал его, как в коде, добавляющем SSL и deflate.
Я проверил ту же ссылку в Firefox с Firebug, и был только один ответ get и полный ответ.
Я дважды проверил его с помощью wireshark и firebug, используя firebug, и этот список кодов wireshark выглядит совершенно одинаково.
Я могу выполнить второе чтение с помощью этого кода, а затем получить тело ответа, но затем я вижу в wireshark, что было установлено еще одно соединение ssl, и я не хочу этого, я хочу, как Firefox делает это.
Другая причина в том, что я просто хочу знать, почему это происходит, и я могу помочь?