在winforms中使用HttpWebRequest传递cookie?

请参阅以下代码:

objCookieContainer = new CookieContainer(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://website.com/login.php?user=xxx&pass=xxx"); request.Method = WebRequestMethods.Http.Get; request.Timeout = 15000; request.Proxy = null; request.CookieContainer = objCookieContainer; HttpWebRequest newRequest = (HttpWebRequest)WebRequest.Create("http://website.com/page.php?link=url"); newRequest.Method = WebRequestMethods.Http.Get; newRequest.Timeout = 15000; newRequest.Proxy = null; newRequest.CookieContainer = objCookieContainer; HttpWebResponse response = null; response = (HttpWebResponse)request.GetResponse(); string readerRequest = new StreamReader(response.GetResponseStream(), Encoding.UTF8).ReadToEnd(); response = (HttpWebResponse)newRequest.GetResponse(); string readerNewRequest = new StreamReader(response.GetResponseStream()).ReadToEnd(); 

在使用request.GetResponse()之后,cookie成功填充了数据并且它具有它的身份validation代码并且也填充了readerRequest,之后我调用newRequest.GetResponse()但是readerNewRequest是空的,我试图做很多事情,但总是相同的结果,我解决这个问题的唯一方法是使用WebBrowser对象,我在其中传递url,我能够使用WebBrowser.DocumentStream获取内容。

我怎么解决这个问题?

  private void button1_Click(object sender, EventArgs e) { var objCookieContainer = new CookieContainer(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://website.com/login.php?user=xxx&pass=xxx"); request.Method = WebRequestMethods.Http.Get; request.Timeout = 15000; request.Proxy = null; request.CookieContainer = objCookieContainer; HttpWebRequest newRequest = (HttpWebRequest)WebRequest.Create("http://website.com/page.php?link=url"); newRequest.Method = WebRequestMethods.Http.Post; newRequest.Timeout = 15000; newRequest.Proxy = null; HttpWebResponse response = null; response = (HttpWebResponse)request.GetResponse(); //once you read response u need to add all cookie sent in header to the 'objCookieContainer' so that it can be forwarded on second response foreach (Cookie cookie in response.Cookies) { objCookieContainer.Add(cookie); } string readerRequest = new StreamReader(response.GetResponseStream(), Encoding.UTF8).ReadToEnd(); //since you have added the cookies, this must response fine now newRequest.CookieContainer = objCookieContainer; response = (HttpWebResponse)newRequest.GetResponse(); string readerNewRequest = new StreamReader(response.GetResponseStream()).ReadToEnd(); } 

如果您的.NET版本低于4.0,您可能会遇到CookieContainer错误:检查此链接