Мне нужно получить длину контента, чтобы сообщить моему приложению, где заканчивается буфер. Проблема в том, что httpwebresponse.ContentLength возвращает -1, даже если в ответе представлен заголовок Content-Length.
Тогда я собираюсь прочитать фактический заголовок, чтобы узнать длину. Длина содержимого, возвращаемая страницей, на которой я тестирую, равна 1646. Анализатор HTTP утверждает, что я получил 1900 байт, поэтому я предполагаю, что разница заключается в длине заголовка. Затем я скопировал все тело из ответа и вставил его в онлайн-сайт strlen, и его размер на самом деле равен 1850 !!
Как это возможно? Почему ответ возвращает недопустимую длину содержимого и почему httpwebrequest.ContentLength возвращает -1? Как я могу рассчитать фактическую длину ответа до получения самого ответа?
EDIT:
Вот код, который я использую, чтобы получить ответ:
using (System.IO.Stream responseStream = hwresponse.GetResponseStream())
{
using (MemoryStream memoryStream = new MemoryStream())
{
int count = 0;
do
{
count = responseStream.Read(buffer, 0, buffer.Length);
TCP_R.SendBytes(buffer);
} while (count != 0);
}
}
byte[] PACKET_END_IDENTIFIER = { 0x8, 0x01, 0x8, 0x1, 0x8 };
TCP_R.SendBytes(PACKET_END_IDENTIFIER);
TCP_R.Close();
У меня есть приложение прокси-сервера, которое принимает запрос, отправляет его другому приложению (моему клиенту), клиент выполняет запрос и, используя класс TCP_R, возвращает результат. Когда сервер получает ответ от клиента, он возвращает ответ обратно в браузер.
Каждый раз, когда я делаю запрос, я получаю все данные + лишний мусор, вот пример:
<tag1><tag2><tag3> ag3>
ag3> - это данные мусора, это похоже на то, что конец буфера обрезан и добавлен снова. Опасно, что клиент отвечает правильным ответом, мусорные данные добавляются в событие DataDecieve .. какие-нибудь советы? спасибо!