Я делаю повторные запросы на веб-сервер с использованием HttpWebRequest, но я случайно получаю «поврежденный» поток ответов в ответ. например, он не содержит тегов, которые, как я предполагаю, должны быть там. Если я запрашиваю одну и ту же страницу несколько раз подряд, она становится «сломанной» ~ 3/5.HttpWebResponse возвращает «неполный» поток
Запрос всегда возвращает ответ 200, поэтому я сначала подумал, что в ответе было добавлено нулевое значение, которое заставило StreamReader считать, что оно дошло до конца.
I've пробовал: 1) читать все в массив байтов и очистки его 2) введение случайного Thread.Sleep после каждого запроса
есть ли потенциально плохая практика с моим кодом ниже или может кто-нибудь скажите мне, почему я случайно получаю неполный ответ? Насколько я вижу, я закрываю все неуправляемые ресурсы, чтобы это не было проблемой, не так ли?
public string ReturnHtmlResponse(string url)
{
string result;
var request = (HttpWebRequest)WebRequest.Create(url);
{
using(var response = (HttpWebResponse)request.GetResponse())
{
Console.WriteLine((int)response.StatusCode);
var encoding = Encoding.GetEncoding(response.CharacterSet);
using(var stream = response.GetResponseStream())
{
using(var sr = new StreamReader(stream,encoding))
{
result = sr.ReadToEnd();
}
}
}
}
return result;
}
Вы пытаетесь использовать метод «DownloadString» WebClient? – Pak
Попробуйте кодированное кодирование для тестирования. Encoding.GetEncoding («ISO-8859-1») для примера. Я не вижу здесь никаких недостатков, должен работать. Имейте в виду, что ошибки могут быть серверной стороной –
@Pak Yup, попробовал WebClient DownloadString и HtmlAgilityPack HtmlWeb.Load. Тот же результат:/ – 10199045