HttpWebRequest Operation Timeout with CookieContai

2019-07-24 18:53发布

问题:

When I am using HttpWebRequest and add this:

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

it will throw an Operation Timeout exception in

HttpWebResponse response = request.GetResponse() as HttpWebResponse;

If I don't add the CookieContainer the program runs without errors. Why doesn't this work?

回答1:

How are you creating Request object??

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(args[0]);
            request.CookieContainer = new CookieContainer();
            HttpWebResponse response = (HttpWebResponse) request.GetResponse();

CookieContainer

Try to set myWebRequest.Timeout =xxx

  • If you are running multiple concurrent requests try setting connections limit

System.Net.ServicePointManager.DefaultConnectionLimit
ServicePoint.ConnectionLimit

Check these links for more information:

HttpWebRequest "operation has timed out"
I need help setting .NET HttpWebRequest timeout
Adjusting HttpWebRequest Connection Timeout in C#

here are many reasons why GetResponse() might hang. Some are:

1) You have reached the connection limit on the client ( 2 conns per http/1.1 server, 4 connections per http/1.0 server, or custom limit set on the ServicePoint), and no connection is free to send a request to the server. In other words, you might have 2 requests outstanding (eg: to a 1.1 server) which are taking more than 2 minutes to complete, and then issue another GetResponse() to the same server. The last getresponse() might time out.

2) You have not closed the response stream of an earlier httpwebresponse. So, even if a connection is free, the request wont be sent.

3) The server is taking too long to send the response.



回答2:

I had this problem too. when I am requesting a Web Page and I put the HttpWebRequest in the Page_Load function and add cookie from current page into CookieContainer but it just hang in there till to timeout

the problem is when I first requesting the web page asp dot net just locked the session for protecting session being writing simultaneously from different place. when I try to call HttpWebRequest to request the same domain same Session it will be block till the first page end it's session lock, meanwhile, the first page is waiting for HttpWebRequest ends it job the two request just waiting for each other till to timeout.

the good news is I found a way to solve this problem, I just set EnableSessionState="ReadOnly" in the first page, it makes first page that I call do not lock the session. hope this can help someone.



回答3:

Situation 1:

There can be several reasons beind it. I wrote the following lines after reading about your problem and this code works,

        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();

I wrotereq.Timeout = 282;because i tested for several values and http://google.com does takes 282 milisecond from my computer to respond. From a slower internet connection, this code may return timeout.

Please be sure to set the time out high enough.

Situation 2: May be the server you are connecting to takes little bit longer if it realize that cookie is enabled. When you don't set anything to req.CookieContainer then cookie is disabled. So please be sure about this fact. :) hope it will work.