HttpWebRequest操作超时与cookicontainer

本文关键字:cookicontainer 超时 操作 HttpWebRequest | 更新日期: 2023-09-27 18:15:56

当我使用HttpWebRequest并添加此:

CookieContainer container = new CookieContainer();
request.CookieContainer = container;

将在

抛出操作超时异常
HttpWebResponse response = request.GetResponse() as HttpWebResponse;

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

HttpWebRequest操作超时与cookicontainer

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

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

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

如何创建请求对象??

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超时时间
c#中调整HttpWebRequest连接超时

GetResponse()可能挂起的原因有很多。有些是:

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

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

情形一:

这背后可能有几个原因。在阅读了你的问题之后,我写了以下几行代码,这些代码可以工作,

        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被禁用。所以请确定这个事实。