2013-07-31 98 views
0

偶尔,我的程序似乎无法制作HTTP Post。我把它缩小到一个饼干,显然正在丢失。Cookie在HttpWebRequest上丢失/丢失GetReponse

一些调查,我把范围缩小

HttpWebResponse response = (HttpWebResponse)http.GetResponse(); 

奇怪的是,它不发生的时间,通常当此方法是第一次运行,那么一切都很好(我强迫重新后除了此cookie。

我似乎已经入侵了一个解决方案一起,对于这种情况下的工作(但我担心它会破坏其他情况下,如通常与黑客的解决方案的方式)。

var cookiesPrePull = cookies.GetCookies(http.RequestUri); 
HttpWebResponse response = (HttpWebResponse)http.GetResponse(); 
foreach (Cookie cookiePre in cookiesPrePull) 
{ 
    bool bExist = false; 
    foreach (Cookie cookiePost in cookies.GetCookies(http.RequestUri)) 
    { 
     if (cookiePre.Name == cookiePost.Name) 
     { 
      bExist = true; 
      break; 
     } 
    } 
    if (!bExist) 
    { 
     cookies.Add(cookiePre); 
    } 
} 

我想了解的是为什么Cookie被GetResponse调用所抛弃。审查小提琴手,没有提到这个cookie。唯一的cookie代码是设置两个cookie。一个已经存在,一个不存在。

该cookie肯定没有过期。在我在这个

欢呼使用CookieCollection和的CookieContainer这样保持你的cookies

回答

1

尝试完全丧失:

CookieContainer container = new CookieContainer(); 
CookieCollection cookies = new CookieCollection(); 

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://somesite.com/login"); 
request.CookieContainer = container; 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
cookies = response.Cookies; // capture the cookies from the response 

request = (HttpWebRequest)WebRequest.Create("http://somesite.com/profile"); 
request.CookieContainer = container; 
request.CookieContainer.Add(cookies); // add cookies from the previous response to the new request 

response = (HttpWebResponse)request.GetResponse(); 
cookies = response.Cookies; // capture the cookies from the response