当httpwebrequest超时时丢失标头信息

时间:2014-09-16 10:07:55

标签: c# cookies timeout httpwebrequest

我正在使用spring webflow编写代码来浏览网站。

我必须使用他的set-cookie标头更新我的cookie,否则我的会话将被终止。

有时请求可能会遇到webException,因此我需要捕获cookie更新的webException响应标头,以便我的下一个请求仍然有效

问题发生在超时异常,其他例外如503工作正常。 webRespones总是为null但是我可以看到服务器已经响应了标题部分并且只是停留在fiddler中发送正文部分。我的会话将被终止,而不会正确捕获标头响应。有没有解决这个问题?

try
{
    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://example.com");
    webRequest.CookieContainer = new CookieContainer();
    webRequest.CookieContainer.Add(cookieCollection);
    webRequest.Timeout = 20000;
    webRequest.ReadWriteTimeout = 20000;
    using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
    {
        //A function handling the cookie adding
        AddCookies(webResponse.Headers, cookieCollection, webResponse.ResponseUri.Host);
    }
}
catch (WebException ex)
{
    HttpWebResponse webResponse = ex.Response as HttpWebResponse;
    if (webResponse == null) throw ex;
    //Null webResponse when timeout, the received header information is dropped.
    AddCookies(webResponse.Headers, cookieCollection, webResponse.ResponseUri.Host);
}

1 个答案:

答案 0 :(得分:2)

超时异常在客户端实现,因此响应将为null。您可以使用原始套接字来实现get,但最简单的解决方案可能是增加超时值,以便获得响应。