当我使用HttpWebRequest
并添加此:
CookieContainer container = new CookieContainer();
request.CookieContainer = container;
将在
抛出操作超时异常HttpWebResponse response = request.GetResponse() as HttpWebResponse;
如果我不添加CookieContainer
,程序运行没有错误。为什么这行不通呢?
我也有这个问题。当我请求网页时我将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被禁用。所以请确定这个事实。