[C#] Créer des cookie

Créer des cookie [C#] - C#/.NET managed - Programmation

Marsh Posté le 13-07-2009 à 13:28:08    

Bonjour,
 
dans mon application j'ai besoin de faire des requètes à un site qui demande une authentification (utilisateur + mot de passe).
Je souhaite donc pouvoir créer un cookie puis le joindre à mes requètes.
 
Ce que j'ai réussi à faire c'est de regarder dans le dossier cookies d'IE et si le cookie existe je l'utilise.
Mais s'il n'est pas présent il est préférable que mon application le crée à partir des données que l'utilisateur aura entrées.
 
J'ai fait pleins de recherches, essayé plein de codes mais en vain....
 
Un petit coup de pouce SVP

Reply

Marsh Posté le 13-07-2009 à 13:28:08   

Reply

Marsh Posté le 13-07-2009 à 14:04:12    

Reply

Marsh Posté le 13-07-2009 à 14:04:50    

Oula, tu as dû beaucoup chercher vu la complexité et la rareté de ce type de code :D
Exemple :
 

Code :
  1. // Si les cookies sont autorisés
  2. if (this.Page.Request.Browser.Cookies)
  3. {
  4.     HttpCookie monCookie = new HttpCookie(COOKIE_NAME);
  5.     monCookie["IDENTIFIANT"] = this.txtIdentifiant.Text;
  6.     monCookie["MOTDEPASSE"] = this.txtMotDePasse.Text;
  7.     monCookie.Expires = DateTime.MaxValue;
  8.     this.Page.Response.Cookies.Add(monCookie);
  9. }
  10. // exemple pour l'effacer  
  11. // Si le cookie existe
  12. if (this.Page.Request.Cookies[COOKIE_NAME] != null)
  13. {
  14. // On positionne la date d'expiration du cookie pour l'effacer
  15.     this.Page.Request.Cookies[COOKIE_NAME].Expires = DateTime.Now;
  16.     this.Page.Response.Cookies.Add(Request.Cookies[COOKIE_NAME]);
  17. }


 
edit : over-burné, magnifique RTFM de la modération (je débarque, j'avais jamais vu  :D )


Message édité par pikti le 13-07-2009 à 14:16:24
Reply

Marsh Posté le 13-07-2009 à 15:54:46    

Merci pour la réponse mais j'avais déjà trouvé ce genre de code et je n'arrive pas à les faire tourner.
Je vais essayé d'être plus explicite :
Je souhaite écrire une fonction qui, étant donnés un user et un pass, fait une requète sur le site www.megaupload.com écrit un cookie dans un fichier.
(biensur le client doit être en possession d'un compte premium chez megaupload)
 
Désolé si ca vous parrait évident mais je débute en programmation.

Reply

Marsh Posté le 13-07-2009 à 16:07:02    

euh si tu n'arrives pas a faire tourner un exemple comme ca, fais autre chose, lache la prog :/


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 13-07-2009 à 16:08:15    

Pour l'instant j'ai écrit ca :
 

Code :
  1. public static void WriteCookie()
  2.         {
  3.            
  4.             HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.megaupload.com/?c=login" ); 
  5.             request.Method = "POST";
  6.             request.Accept = "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*";
  7.             request.Credentials = new NetworkCredential(username, password);
  8.             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  9.            
  10.             foreach (Cookie c in response.Cookies)
  11.             {
  12.                 File.WriteAllText(@"c:\test.txt", c.Value);
  13.             }

Reply

Marsh Posté le 13-07-2009 à 16:09:09    

Tamahome a écrit :

euh si tu n'arrives pas a faire tourner un exemple comme ca, fais autre chose, lache la prog :/


 
merci pour les encouragements  :pt1cable:

Reply

Marsh Posté le 13-07-2009 à 16:09:28    

je doute que ca compile...


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 13-07-2009 à 16:10:32    

fffff2mpl4 a écrit :


 
merci pour les encouragements  :pt1cable:


 
tu vas passer 50 ans a faire un truc que n'importe qui ferait en 2 secondes, après si tu aimes perdre ton temps...
Le fait que tu n'es meme pas pris la peine de chercher sur google prouve ton manque de motivation. Tu abandonneras rapidement, c'est un fait.


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 13-07-2009 à 16:12:00    

si ca compile mais ca ne fait rien

Reply

Marsh Posté le 13-07-2009 à 16:12:00   

Reply

Marsh Posté le 13-07-2009 à 16:13:23    

y'a aucun using, il manque au moins une accolade fermante etc... et ca compile ?  
 
Mais oui bien sur...
 
edit : meme en rajoutant }

Citation :


Erreur 1 Le type ou le nom d'espace de noms 'HttpWebRequest' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?) C:\DevTemp\TestConsoleDivers\TestHFR\TestHFR\Program.cs 12 4 TestHFR
Erreur 2 Le type ou le nom d'espace de noms 'HttpWebRequest' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?) C:\DevTemp\TestConsoleDivers\TestHFR\TestHFR\Program.cs 12 30 TestHFR
Erreur 3 Le nom 'WebRequest' n'existe pas dans le contexte actuel C:\DevTemp\TestConsoleDivers\TestHFR\TestHFR\Program.cs 12 45 TestHFR
Erreur 4 Le type ou le nom d'espace de noms 'NetworkCredential' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?) C:\DevTemp\TestConsoleDivers\TestHFR\TestHFR\Program.cs 16 30 TestHFR
Erreur 5 Le nom 'username' n'existe pas dans le contexte actuel C:\DevTemp\TestConsoleDivers\TestHFR\TestHFR\Program.cs 16 48 TestHFR
Erreur 6 Le nom 'password' n'existe pas dans le contexte actuel C:\DevTemp\TestConsoleDivers\TestHFR\TestHFR\Program.cs 16 58 TestHFR
Erreur 7 Le type ou le nom d'espace de noms 'HttpWebResponse' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?) C:\DevTemp\TestConsoleDivers\TestHFR\TestHFR\Program.cs 18 4 TestHFR
Erreur 8 Le type ou le nom d'espace de noms 'HttpWebResponse' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?) C:\DevTemp\TestConsoleDivers\TestHFR\TestHFR\Program.cs 18 32 TestHFR
Erreur 9 Le type ou le nom d'espace de noms 'Cookie' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?) C:\DevTemp\TestConsoleDivers\TestHFR\TestHFR\Program.cs 20 13 TestHFR
Erreur 10 Le nom 'File' n'existe pas dans le contexte actuel C:\DevTemp\TestConsoleDivers\TestHFR\TestHFR\Program.cs 21 5 TestHFR

Message cité 1 fois
Message édité par Tamahome le 13-07-2009 à 16:14:53

---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 13-07-2009 à 16:14:48    

Tamahome a écrit :


 
tu vas passer 50 ans a faire un truc que n'importe qui ferait en 2 secondes, après si tu aimes perdre ton temps...
Le fait que tu n'es meme pas pris la peine de chercher sur google prouve ton manque de motivation. Tu abandonneras rapidement, c'est un fait.


 
Si tu as lu mon premier post j'ai déja fait des recherches. Je suis très motivé aussi.
Je poste un message quand vraiment je sèche.
Ici c'est peut etre à cause de mon manque de connaissance sur le protocole HTTP.
Mon application est presque terminée, c'est une des dernières fonctions qu'il me manque

Reply

Marsh Posté le 13-07-2009 à 16:16:47    

Tamahome a écrit :

y'a aucun using, il manque au moins une accolade fermante etc... et ca compile ?  
 
Mais oui bien sur...
 
[/quote]


 
T'es de mauvaise foie là. Tu te doute bien que j'ai recopié uniquement la fonction qui m'intéresse et pas tout le fichier.
Et OK en faisant le copier coller j'ai oublié }

Reply

Marsh Posté le 13-07-2009 à 16:18:29    

non mais tu veux qu'on t'aide, tu crois qu'on va passer en plus du temps à essayer de décrypter ton bout de code pour le faire marcher ?  
 
Poste deja un truc qui compile, on verra ce qu'on pourra faire apres !


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 13-07-2009 à 16:24:34    

OK voila :
 

Code :
  1. using System;
  2. using System.Text;
  3. using System.IO;
  4. using System.Net;
  5. using System.Web;
  6. namespace ConsoleApplication1
  7. {
  8.     public class Auth
  9.     {
  10.         private static string username = "user";
  11.         private static string password = "pass";
  12.         public static void CreateCookie()
  13.         {
  14.             HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.megaupload.com/?c=login" );
  15.             request.Method = "POST";
  16.             request.Accept = "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*";
  17.             request.Referer = "http://www.megaupload.com/?c=login";
  18.             request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; Tablet PC 2.0)";
  19.             request.Credentials = new NetworkCredential(username, password);
  20.             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  21.             Console.WriteLine(response.Cookies.Count);
  22.             foreach (Cookie c in response.Cookies)
  23.             {
  24.                 Console.WriteLine(c.Value);
  25.                 File.WriteAllText(@"c:\test.txt", c.Value);
  26.             }
  27.         }
  28.     }
  29. }

Reply

Marsh Posté le 13-07-2009 à 16:30:51    

c'est normal que dans ta méthode qui s'appelle CreateCookie, tu ne crées pas un cookie ?


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 13-07-2009 à 16:39:09    

En fait je veux créer un cookie sous forme de fichier

Reply

Marsh Posté le 13-07-2009 à 16:59:18    

ca ne veut rien dire.
 
tu veux sérialiser le contenu d'un cookie existant dans un fichier plat ?


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 13-07-2009 à 17:08:33    

Quand tu te connecte à un site celui ci t'envoie un cookie et le navigateur l'enregistre sous forme de fichier txt afin de le renvoyer dans les requète.
 
Et bien je souhaite faire pareil.


Message édité par fffff2mpl4 le 13-07-2009 à 17:08:47
Reply

Marsh Posté le 13-07-2009 à 17:12:45    

Mais ta méthode CreateCookie elle est censé faire quoi ?
- S'identifier sur une page via un Post
- Récupérer le cookie envoyé par le site
- Sérialiser le cookie obtenue dans un fichier plat  
 
Ca doit faire ces 3 trucs la ou seulement le dernier ?


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 13-07-2009 à 17:19:38    

En fait les 3.

Reply

Marsh Posté le 15-07-2009 à 09:55:40    

Et pourquoi veux tu sérialiser le cookie ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 15-07-2009 à 11:11:39    

Harkonnen a écrit :

Et pourquoi veux tu sérialiser le cookie ?


 
Mon application a un nombre important de requètes à effectuer sur ce site.
Je pense donc qu'il est plus simple de stoker le cookie afin de le renvoyer avec chaque requète

Reply

Marsh Posté le 15-07-2009 à 14:35:47    

plus simple pour qui ? le programmeur ? L'utilisateur ? Le programme ?
Et tu ne peux pas le renvoyer si tu ne le sérialises pas ?


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 15-07-2009 à 15:22:43    

En fait je ne suis pas sur que ce soit la méthode la plus simple, mais je me suis dit que c'était le plus simple à programmer.
 
Avez-vous une idée de la manière dont il faut procéder ?

Reply

Marsh Posté le 15-07-2009 à 17:00:29    

Bon je pense que j'ai un peu avancé.
Avec un code simple comme ca :

Code :
  1. CookieContainer cookieJar = new CookieContainer();
  2. var request = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com" );
  3. request.CookieContainer = cookieJar;
  4. var response = request.GetResponse();
  5. foreach (Cookie c in cookieJar.GetCookies(request.RequestUri))
  6. {
  7.     Console.WriteLine("Cookie['" + c.Name + "']: " + c.Value);
  8. }


 
on peut récupérer le cookie envoyé par google.
Maintenant il me faut faire la même chose avec megaupload mais en envoyant les bons paramètres.
Avec un sniffer HTTP, j'ai vu qu'il fallait se connecter sur http://www.megaupload.com/?c=login avec les paramètres login=1&redir=1&username=user&password=pass.
Seul problème je n'y parviens pas. J'ai essayé le code suivant :

Code :
  1. CookieContainer cookieJar = new CookieContainer();
  2.             string data;
  3.             string strResponse;
  4.             var request = (HttpWebRequest)HttpWebRequest.Create("http://www.megaupload.com/?c=login" );
  5.             request.CookieContainer = cookieJar;
  6.             request.Method = "POST";
  7.             data = "login=1&redir=1&username=user&password=pass";
  8.             request.ContentLength = data.Length;
  9.             // Write the request
  10.             StreamWriter stOut = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
  11.             stOut.Write(data);
  12.             stOut.Close();
  13.             // Do the request to get the response
  14.             StreamReader stIn = new StreamReader(request.GetResponse().GetResponseStream());
  15.             strResponse = stIn.ReadToEnd();
  16.             stIn.Close();
  17.            
  18.            
  19.             foreach (Cookie c in cookieJar.GetCookies(request.RequestUri))
  20.             {
  21.                 Console.WriteLine("Cookie['" + c.Name + "']: " + c.Value);
  22.             }


 
mais ca ne fonctionne pas.
D'autre part est-il normal que lorsqu'on rentre dans un browser http://www.megaupload.com/?c=login [...] sword=pass
ca ne log pas ?

Reply

Marsh Posté le 16-07-2009 à 11:57:22    

euh oui, c'est normal, tu confonds POST et GET...
 
des parametres passés via un POST ne sont pas du tout équivalent à ceux posés dans la QueryString...


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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