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的替代方案吗?

DownloadString timed out

有些网站足够聪明,可以检查请求是否由浏览器发出。当他们检测到请求不是用浏览器完成的时,他们不会做出回应。但是,只需在请求中发送用户代理信息,就很容易欺骗他们。因此,解决方案是在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之类的工具来了解网络级别的情况。