récupérer un cookie

récupérer un cookie - C#/.NET managed - Programmation

Marsh Posté le 07-06-2010 à 10:25:45    

Bonjour à tous, c'est la premiére fois que je post dans la section programmation de hardware.fr, j'éspère qu'il y a autant d'activité que sur le reste du forum :).
Voila mon problème, je suis en stage et je n'ai plus beaucoup de temps, j'essaie de faire un programme qui rempli plein de formulaire,  bref...
Mon programme bloque lorsque que je récupère la reponse du serveur à ma requête.
Je récupère cette réponse uniquement pour récupérer le cookie et non pas pour parser une page, donc si quelqu'un a une autre solution pour récupérer un cookie je suis prenneur :).
voila mon code complet :
 
using System;
 
using System.Net;
 
using System.IO;
 
using System.Threading;
 
 
namespace ProjetRes2010
{
 
 class MainClass
 
{
  public static void Main (string[] args)
   
 {
   string Url = "http://www.unepage.fr/";
 
   string UrlLogin = Url +"pmb/main.php";
 
   //string login = "blabla";
   
   //string mdp = "blabla";
 
   CookieCollection MonCookie = null;
 
//On se connecte
 HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(UrlLogin);
 
   myReq.Credentials = CredentialCache.DefaultCredentials;
 
   myReq.CookieContainer = new CookieContainer();
 
   myReq.Method = "POST";
   
   myReq.ContentType="application/x-www-form-urlencoded";
 
   string chaine = "user=admin&password=media&database=bibli";
 
   myReq.ContentLength = chaine.Length+1;
   
   Stream envoi = myReq.GetRequestStream();
 
   StreamWriter SW = new StreamWriter(envoi);
 
   Console.WriteLine ("test" );
   SW.WriteLine(chaine);
   
   //SW.Close();
 
 //on lit la reponse liee a la connexion
   Console.WriteLine ("test2" );
     
   HttpWebResponse response = (HttpWebResponse) myReq.GetResponse();
   
   Console.WriteLine ("test3" );
 
   Stream streamResponse = response.GetResponseStream();
 
   StreamReader SR = new StreamReader(streamResponse);
 
   Console.WriteLine(SR.ReadToEnd());
 
   //SR.Close();
 
   MonCookie = response.Cookies;//C'EST SA QUE JE VEUX FAIRE!!!^^
 
   Console.WriteLine("--------------------------------------------------------------------" );
}
}
}
Le programme bloque juste aprés le test 2.( le test 3 ne se fait pas).
HttpWebResponse response = (HttpWebResponse) myReq.GetResponse();
 
Volontairement les Url ne sont pas les bonnes....  
 
Merci d'avance à tous ceux qui prèterons de l'attention à mon post.

Reply

Marsh Posté le 07-06-2010 à 10:25:45   

Reply

Marsh Posté le 07-06-2010 à 11:14:04    

Si ton problème apparait au moment de contacter ton url distante je ne vois pas ce qu'on peut faire pour toi...
- A mon avis ton "blocage" peut être lié à une indispo du site, tu n'as qu'à laisser au login le temps de se faire et utiliser le code retour (404, etc).
- Au lieu d'utiliser des Console.Writeline, execute en debug et pose des points d'arrêt aux moments clés.
- Une fois que tu seras arrivé là, ton utilisation de la propriété Cookies parait assez louche, tu as un exemple ici : http://blogs.microsoft.co.il/blogs [...] ainer.aspx si ça peut aider.

 

A part ça et hormis que ton code est assez moche à lire (pas du tout structuré), les principes sont là. Pour la prochaine fois merci d'utiliser la balise code du forum pour la lisibilité.


Message édité par TotalRecall le 07-06-2010 à 11:14:38

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 07-06-2010 à 11:19:40    

Merci à toi, oui excuse moi pour la présentation je m'en suis aperçu lorsque j'ai envoyé.
Je reviens vers 1h30, jtest ce que tu m'a fillé, par contre pas trés bien compris ton utilisation du code 404.
Pour t'aider peut être, je cherche vraiment juste a récupéré le cookie,
j'ai essayé avec httpfox de le recupérer manuellemnt mais le constructeur ne prend que du Int32
ou un cookie bien sur.
Dans http fox voila ce que je peux récupérer :  
PhpMyBibli-LOGIN=admin&PhpMyBibli-SESSNAME=PhpMyBibli&PhpMyBibli-SESSID=1164845689&PhpMyBibli-DATABASE=bibli&PHPSESSID=2040f422c674390b0b2a949adea4de96
 
Je ne sais pas si je peux créer un cookiecontainer avec.
Merci pour ton attention.

Reply

Marsh Posté le 07-06-2010 à 14:07:39    

Merci pour vos réponses, je n'ai pas trouvé comment mettre son code proprement dsl.
Donc j'ai trouvé la solution je la post si d'autre personne en auraient besoin :  
 
public void Start()
{
    HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(SITE + PAGE_LOGIN);
    myReq.ContentType = "application/x-www-form-urlencoded";
    myReq.Method = "POST";  
    myReq.Timeout = TIMEOUT;
 
    myReq.CookieContainer = new CookieContainer();
     
    byte[] myByte = Encoding.ASCII.GetBytes(_ParamsLogin);
    myReq.ContentLength = myByte.Length;
 
    try
    {
        Stream myStream = myReq.GetRequestStream();
        myStream.Write (myByte, 0, myByte.Length);
        myStream.Close ();
        HttpWebResponse response = (HttpWebResponse) myReq.GetResponse();
        myCookie = response.Cookies;
         
         response.Close();
    }
    catch(Exception e)
    {
    Console.WriteLine(e);
    }
}
 
Voila!
Bon bien sur on met tous sa dans une petite classe
qu'on apellera dans le main, et on oublie pas de créer le cookie avant : _myCookie = new CookieCollection();
et _ParamsLogin est le string des information de login mot de pass.
Voila et merci tout de même, toujours du supe boulot sur ce fofo.

Reply

Marsh Posté le 07-06-2010 à 14:08:05    

Ha ba sa va la mise en forme finalement^^

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed