4

ouvrir un site Web en utilisant le contrôle WebBrowser et puis enregistrez les cookies dans CookieContainer, et utiliser plus tard HttpWebRequest pour traiter les pages de navigation avant etc.comment supprimer/mettre à jour un cookie dans un cookie container C#?

La question se pose, quand je fais une recherche et il retourne 100 pages, sur la première page , il enregistre un cookie nommé: ABC, que j'ajoute à cookiecontainer et passe à la page suivante, sur la deuxième page encore Cookie même nommé: ABC est donné une valeur, mais maintenant j'ai deux mêmes cookies dans cookiecontainer et quand je bouge à la page suivante, cela ne fonctionne pas, car il prend le premier cookie qui gâche tout.

Comment résoudre ce problème?

HttpWebRequest FONCTION:

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

Vous n'avez pas besoin d'ajouter explicitement les cookies de la réponse, ils sont ajoutés à yummycookies quand vous rentrerez la réponse (tant car il ne redirige pas) –

+0

Si je ne les ajoute pas, il ne passe même pas de la page 1 à la page 2. – confusedMind

+0

Le yummyCookie contient les informations de connexion et plus tard le cookie à la page 1, alors supposé obtenir le cookie à la page 2, même nom qu'à la page 1 qui est en conflit. – confusedMind

Répondre

5

Vous pouvez utiliser la méthode 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"); 

Appel GetCookies(uri) donnera un seul cookie avec Value=value1.

Et dans votre cas, le code serait quelque chose comme

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