#c# #.net #visual-studio #winforms #web-crawler
Вопрос:
Поскольку это очень распространенная проблема, но нет надлежащего решения, которое могло бы решить мою проблему.
Я испытываю эту проблему при попытке чтения / загрузки данных из StreamReader
Вот мой код.
public bool WebSiteIsAvailable(HttpWebRequest request, HttpWebResponse response)
{
request.Timeout = 15000;
request.Method = "HEAD"; // As per Lasse's comment
try
{
using (response = (HttpWebResponse)request.GetResponse())
{
return true;
}
}
catch (WebException)
{
return false;
}
}
public string ParseHtml(string html)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(html);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(1251));
if (WebSiteIsAvailable(request, response))
{
richTextBox1.Text = sr.ReadToEnd();
sr.Close();
response.Close(); // While using WebResponse please make sure that you close the response stream ie(.close) else it would hang the machine after certain repeated execution.Eg
}
else
{
response.Close();
}
return html;
}
Комментарии:
1.вы поддерживаете код или пишете новый код? Если новый код, пожалуйста, рассмотрите возможность его использования
System.Net.Http
здесь. Вы также звонитеGetResponse
два раза подряд, это желаемое поведение?
Ответ №1:
Я думаю, вам следует рассмотреть возможность удаления функции WebSiteIsAvailable() и объединения этой логики с вашей функцией ParseHTML. Вы дважды вызываете GetResponse (), и это может быть источником вашей проблемы.
Кроме того, поток кажется немного странным. Вы вызываете GetResponse() и создаете экземпляр средства чтения потока, а ЗАТЕМ вызываете WebSiteIsAvailable. Если WebSiteIsAvailable вернет false, у вас уже есть проблема еще до того, как вы сделаете этот звонок.