2011-12-16 7 views
2

J'essaie de me connecter à un site qui utilise des cookies. Mon identifiant est le suivant:Récupérer et mettre en place des cookies

 private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create(baseurl); 

      req.Referer = referer; 
      req.AllowAutoRedirect = true; 
      req.KeepAlive = true; 
      req.Method = "POST"; 
      req.ContentType = "application/x-www-form-urlencoded"; 
      byte[] postbuf = Encoding.ASCII.GetBytes(login); 
      req.ContentLength = postbuf.Length; 
      Stream rs = req.GetRequestStream(); 
      rs.Write(postbuf, 0, postbuf.Length); 
      rs.Close(); 

      cookie = req.CookieContainer = new CookieContainer(); 

      WebResponse resp = req.GetResponse(); 

      string s = ""; 
      foreach (Cookie c in cookie.GetCookies(req.RequestUri)) 
      { 
       s += ("Cookie['" + c.Name + "']: " + c.Value); 
      } 
      textBox1.Text = s; 

      resp.Close(); 
     } 
     catch (Exception ex) 
     { 
      System.Diagnostics.Debug.WriteLine(ex); 
     } 
    } 

Le cookie possède 2 clés avec des valeurs. Ensuite, j'essaie d'envoyer une demande de poste sur le site comme suit:

 private void button2_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create(search); 

      req.Referer = referer; 
      req.AllowAutoRedirect = true; 
      req.KeepAlive = true; 
      req.CookieContainer = cookie; 
      StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream()); 

      if (reader != null) 
      { 
       string data = reader.ReadToEnd(); 
       reader.Close(); 

       textBox1.Text = data; 
      } 
     } 
     catch (Exception ex) 
     { 
      System.Diagnostics.Debug.WriteLine(ex); 
     } 
    } 

Mais je reçois une erreur qu'il ne peut pas authentifier. Quand je me connecte en utilisant firefox, je vois que le cookie contient beaucoup plus d'entrées.

Quel est le problème avec mon code?

+0

La première réponse contient le cookie de .ASPXAUTH? – TheBoyan

+0

Veuillez ne pas mettre "C#" dans le titre. C'est ce que les tags sont pour. – Amy

+0

@Bojan: Non, ce n'est pas –

Répondre

1

Je pense que votre erreur est dans la ligne suivante:

cookie = req.CookieContainer = new CookieContainer(); 

vous instancier un nouveau conteneur cookie chaque fois après que vous écrivez le flux de demande.

Depuis cookie est une variable globale initialisez dire qu'une seule fois par exemple où il est déclaré et le mettre avant d'écrire le flux:

req.CookieContainer = cookie; 
rs.Write(postbuf, 0, postbuf.Length); 
+0

J'ai changé le code et je peux confirmer que la connexion est réussie. Mais les appels suivants sur le site Web renvoient toujours «Impossible d'authentifier», même si je configure le cookie. –

+0

@ Ivan-MarkDebono - Est-ce que vous définissez CookieContainer comme nouveau CookieContainer() sur un autre endroit dans votre code dans ces appels ultérieurs? La chose à propos de CookieContainer est que vous devez garder une trace de l'ancien conteneur de cookies une fois que vous vous êtes connecté car il contient les cookies de connexion. Une fois que vous l'avez défini, vous perdez tous les précédents. – TheBoyan