2010-06-04 4 views
23

Je crée une application pour la récupération de données à partir de la page Web. La page est protégée par un mot de passe et lorsque l'utilisateur se connecte, le cookie est créé.comment utiliser les cookies avec HttpWebRequest

Afin de récupérer les données, l'application doit d'abord se connecter: effectuer une requête Web avec nom d'utilisateur et mot de passe et stocker le cookie. Ensuite, lorsque le cookie est stocké, il doit être ajouté dans les en-têtes de toutes les demandes.

est la méthode ici qui fait la demande et récupère le contenu:

public void getAsyncDailyPDPContextActivationDeactivation() 
    { 
     HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(dailyPDPContextActivationDeactivation); 

     IAsyncResult asyncResult = httpWebRequest.BeginGetResponse(null, null); 

     asyncResult.AsyncWaitHandle.WaitOne(); 

     using (HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.EndGetResponse(asyncResult)) 
     using (StreamReader responseStreamReader = new StreamReader(httpWebResponse.GetResponseStream())) 
     { 
      string responseText = responseStreamReader.ReadToEnd(); 
     } 

    } 

Est-ce que quelqu'un sait comment modifier cette méthode afin d'ajouter un cookie dans l'en-tête?

Ci-dessous est l'écran d'impression de la structure d'en-tête de la demande avec le navigateur:

alt text http://img404.imageshack.us/img404/4793/cookiea.jpg

Je serais également reconnaissant si quelqu'un a suggéré un moyen de stocker cookies de la réponse (lorsque les marques d'application une requête http: xxx.xxx.xxx/login? username = xxx & password = xxx le cookie est créé et doit être stocké pour les demandes futures).

Répondre

32
CookieContainer cookieContainer = new CookieContainer(); 
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(...); 
httpWebRequest.CookieContainer = cookieContainer; 

Ensuite, vous réutiliser cette CookieContainer dans les demandes suivantes:

HttpWebRequest httpWebRequest2 = (HttpWebRequest)WebRequest.Create(...); 
httpWebRequest2.CookieContainer = cookieContainer; 
+1

Je ne comprends pas vraiment. Pourquoi mettre un cookiecontainer fraîchement créé (donc vide) dans la requête que vous êtes sur le point d'envoyer? Ne devrait-il pas être beaucoup plus logique que vous devez remplir ce cookieContainer plus tard avec la réponse? Y a-t-il une raison pour laquelle c'est comme ça? edit: Beaucoup de réponses sont données de cette façon, mais je n'arrive pas à comprendre pourquoi c'est ainsi. – deltu100

+0

Mon application a un comportement indésirable en utilisant cela. L'utilisation de httpWebRequest2.Headers.Set ("Cookie", ... fonctionne correctement.) – Eduardo

+0

Si j'ai déjà ouvert une session sur la page Web, un cookie est stocké sur ma HD afin que je puisse ignorer la connexion par programmation. la requête web recherche et remplit automatiquement le fichier contenant les cookies trouvés, ou est-ce que vous devez le faire manuellement? Comment faire cela, si ce dernier? –

Questions connexes