我有一个返回网页内容的方法:
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,还有其他选择吗?
发布于 2012-01-21 22:46:39
有些网站足够聪明,可以检查请求是否由浏览器提出。当他们检测到请求不是用浏览器完成时,他们就不会响应。但是,简单地将用户代理信息与请求一起发送就很容易欺骗他们。因此,解决方案是在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));
}PS:为了检测这个问题,我使用的是费德勒,而不是Wireshark,我发现它太复杂了。
发布于 2012-01-11 04:11:15
例外情况是手术超时了。这似乎是一件相当合理的事情,有时会发生--可能会有缓慢的服务器、缓慢的互联网连接等等--如果你试图从同一台主机下载多个页面,就会使用连接池,即使每个单独的请求看起来都正常,也会导致这种情况发生。
使用像Wireshark这样的工具来了解网络级别上正在发生的事情。
https://stackoverflow.com/questions/8814001
复制相似问题