4

我使用webbrowser控件打開網站,然後在cookieContainer中保存cookie,然後使用HTTPwebrequest處理前進瀏覽頁面等。如何刪除/更新cookie容器中的cookie c#?

問題出現,當我進行搜索並返回100頁時,在第一頁,它會保存一個名爲ABC的cookie,我將它添加到cookiecontainer中並移動到下一頁,在第二頁上再次顯示相同的Cookie:ABC給出了一些值,但現在我在cookiecontainer中有兩個相同的cookie,並且當我移動到下一頁,它不起作用,因爲它採取了第一個餅乾弄糟了所有東西。

如何解決這個問題?

HttpWebRequest的功能:

public string getHtmlCookies(string url) 
    { 
     string responseData = ""; 
     try 
     { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
      request.Accept = "*/*"; 
      request.AllowAutoRedirect = true; 
      request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"; 
      request.Timeout = 30000; 
      request.Method = "GET"; 
      request.CookieContainer = yummycookies; 

      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      if (response.StatusCode == HttpStatusCode.OK) 
      { 
       foreach (Cookie cookie in response.Cookies) 
       { 
        string name = string.Empty; 
        name = cookie.Name; 
        string value = cookie.Value; 
        string path = "/"; 
        string domain = "www.example.com"; 
        yummycookies.Add(new Cookie(name.Trim(), value.Trim(), path, domain)); 

       } 


       Stream responseStream = response.GetResponseStream(); 
       StreamReader myStreamReader = new StreamReader(responseStream); 
       responseData = myStreamReader.ReadToEnd(); 
      } 
      response.Close(); 


     } 
     catch (Exception e) 
     { 
      responseData = "An error occurred: " + e.Message; 
     } 

     return responseData; 

    } 
+0

你並不需要明確地從響應加餅乾,他們將被添加到yummycookies當你迴響應(只要因爲它不會重定向) –

+0

如果我不添加它們,它甚至不會從第1頁移動到第2頁。 – confusedMind

+0

這個yummyCookie包含登錄信息,後面是第1頁上的cookie,然後應該在第2頁上獲取cookie,與第1頁上的名稱相沖突。 – confusedMind

回答

5

可以使用SetCookies方法。

var container = new System.Net.CookieContainer(); 
var uri = new Uri("http://www.example.com"); 
container.SetCookies(uri,"name=value"); 
container.SetCookies(uri,"name=value1"); 

調用GetCookies(uri)會給一個Cookie與Value=value1

而在你的情況下,代碼會像

var uri = new Uri("http://www.example.com"); 
yummycookies.SetCookies(uri, response.Headers[HttpResponseHeader.SetCookie]);