C# 下载字符串超时
我有一个返回网页内容的方法:C# 下载字符串超时,c#,asp.net,C#,Asp.net,我有一个返回网页内容的方法: private string FetchHTML(string sUrl, Encoding encoding) { System.Net.WebClient oClient = new System.Net.WebClient(); oClient.Encoding = encoding; return System.Web.HttpUtility.HtmlDe
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加载链接(例如)时,我在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));
}
PS:为了检测问题,我使用了Wireshark而不是Wireshark,我发现它太复杂了。你能给出一个URL在你发布的链接之外超时的例子吗?也许是比livejournal名声不好的东西?它还可以帮助您查看用于调用
FetchHTML
的特定代码(可以使用它们所代表的值替换任何变量)。