DownloadString timed out
本文关键字:out timed DownloadString | 更新日期: 2023-09-27 18:20:08
我有一个返回网页内容的方法:
private string FetchHTML(string sUrl, Encoding encoding)
{
System.Net.WebClient oClient = new System.Net.WebClient();
oClient.Encoding = encoding;
return System.Web.HttpUtility.HtmlDecode(oClient.DownloadString(sUrl));
}
但当我尝试从livejournal加载链接时(例如,http://mos-jkh.livejournal.com/769579.html)那么我在DownloadString:上得到这个异常
请求已中止:操作已超时。
这是一个已知的问题吗?为什么DownloadString不适用于某些网页?有解决方案吗?或者有DownloadString的替代方案吗?
有些网站足够聪明,可以检查请求是否由浏览器发出。当他们检测到请求不是用浏览器完成的时,他们不会做出回应。但是,只需在请求中发送用户代理信息,就很容易欺骗他们。因此,解决方案是在FetchHTML方法中添加一行代码:
private string FetchHTML(string sUrl, Encoding encoding)
{
System.Net.WebClient oClient = new System.Net.WebClient();
oClient.Encoding = encoding;
// set the user agent to IE6
oClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)");
return System.Web.HttpUtility.HtmlDecode(oClient.DownloadString(sUrl));
}
附言:为了检测这个问题,我使用了Fiddler而不是Wireshark,我觉得它太复杂了。
好吧,异常表明操作超时。在某些时候,这似乎是一件非常合理的事情——可能会出现服务器速度慢、互联网连接速度慢等情况——如果你试图从同一台主机下载多个页面,就会使用连接池,即使每个请求看起来都很好,也会导致这种情况发生。
使用Wireshark之类的工具来了解网络级别的情况。