首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpWebRequest操作超时与CookieContainer

HttpWebRequest操作超时与CookieContainer
EN

Stack Overflow用户
提问于 2011-11-27 12:19:11
回答 3查看 2.5K关注 0票数 1

当我使用HttpWebRequest并添加以下内容时:

代码语言:javascript
复制
CookieContainer container = new CookieContainer();
request.CookieContainer = container;

它将引发操作超时异常

代码语言:javascript
复制
HttpWebResponse response = request.GetResponse() as HttpWebResponse;

如果我不添加CookieContainer,程序运行时就没有错误。为什么这个不行?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-27 13:02:42

如何创建请求对象??

代码语言:javascript
复制
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(args[0]);
            request.CookieContainer = new CookieContainer();
            HttpWebResponse response = (HttpWebResponse) request.GetResponse();

CookieContainer

尝试设置myWebRequest.Timeout =xxx

  • 如果正在运行多个并发请求,请尝试设置连接限制。

System.Net.ServicePointManager.DefaultConnectionLimit ServicePoint.ConnectionLimit

有关更多信息,请访问这些链接:

HttpWebRequest“操作超时”

我需要帮助设置.NET HttpWebRequest超时

在HttpWebRequest中调整C#连接超时

以下是GetResponse()可能挂起的许多原因。其中一些是:

1)您已经达到了客户端上的连接限制(每个http/1.1服务器有2个连接,每个http/1.0服务器有4个连接,或者在ServicePoint上设置了自定义限制),没有连接可以向服务器发送请求。换句话说,您可能有两个请求未完成(例如:一个1.1服务器),这些请求需要超过2分钟才能完成,然后向同一台服务器发出另一个GetResponse()。最后一个getresponse()可能会超时。

2)您还没有关闭早期httpwebresponse的响应流。因此,即使连接是空闲的,请求也不会被发送。

3)服务器发送响应的时间太长。

票数 0
EN

Stack Overflow用户

发布于 2012-03-30 00:55:33

我也有这个问题。当我请求网页时,我将HttpWebRequest放在Page_Load函数中,并将当前页面中的cookie添加到CookieContainer中,但它一直挂在那里直到超时

问题是,当我第一次请求网页asp点网只是锁定会话,以保护会话同时从不同的地方写入。当我试图调用HttpWebRequest请求同一个域相同的会话时,它将被阻塞,直到第一个页面结束它的会话锁,同时,第一个页面正在等待HttpWebRequest结束它的作业--两个请求只是等待对方直到超时。

好消息是我找到了解决这个问题的方法,我只是在第一页中设置了EnableSessionState="ReadOnly“,它使我调用的第一页不锁定会话。希望这能帮上忙。

票数 4
EN

Stack Overflow用户

发布于 2011-11-27 19:43:50

情况1:

这可能有几个原因。在阅读了有关您的问题的文章之后,我编写了以下几行代码,

代码语言:javascript
复制
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://google.com");
        req.Method = "GET";
        req.Timeout = 282;
        CookieContainer cont = new CookieContainer();
        req.CookieContainer = cont;

        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

        using (StreamReader reader = new StreamReader(resp.GetResponseStream()))
        {
            Console.Write(reader.ReadToEnd());
        }
        resp.Close();
        req.Abort();
        Console.ReadLine();

我编写req.Timeout = 282;是因为我测试了几个值,而http://google.com确实需要从我的计算机中抽出282毫秒才能做出响应。从较慢的internet连接,此代码可能返回超时。

请务必把时间定得足够高。

情况2:如果您意识到cookie是启用的,您所连接的服务器可能会花费更长的时间。当您不将任何内容设置为req.CookieContainer时,cookie就会被禁用。所以请确定这一事实。)希望它能起作用。

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

https://stackoverflow.com/questions/8285500

复制
相关文章

相似问题

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