首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DownloadString超时

DownloadString超时
EN

Stack Overflow用户
提问于 2012-01-11 04:07:37
回答 2查看 2.8K关注 0票数 2

我有一个返回网页内容的方法:

代码语言:javascript
复制
        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,还有其他选择吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-21 22:46:39

有些网站足够聪明,可以检查请求是否由浏览器提出。当他们检测到请求不是用浏览器完成时,他们就不会响应。但是,简单地将用户代理信息与请求一起发送就很容易欺骗他们。因此,解决方案是在FetchHTML方法中添加一行代码:

代码语言:javascript
复制
    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,我发现它太复杂了。

票数 8
EN

Stack Overflow用户

发布于 2012-01-11 04:11:15

例外情况是手术超时了。这似乎是一件相当合理的事情,有时会发生--可能会有缓慢的服务器、缓慢的互联网连接等等--如果你试图从同一台主机下载多个页面,就会使用连接池,即使每个单独的请求看起来都正常,也会导致这种情况发生。

使用像Wireshark这样的工具来了解网络级别上正在发生的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8814001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档