2010-06-04 14 views
23

Sto creando un'applicazione per il recupero dei dati dalla pagina web. La pagina è protetta da password e quando l'utente accede al cookie viene creato.come utilizzare i cookie con HttpWebRequest

Per recuperare i dati, l'applicazione deve prima accedere: effettuare una richiesta web con nome utente e password e memorizzare il cookie. Quindi, quando il cookie viene memorizzato, deve essere aggiunto agli header di tutte le richieste.

qui è il metodo che rende le richieste e recupera il contenuto:

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(); 
     } 

    } 

Qualcuno sa come modificare questo metodo al fine di aggiungere un cookie nell'intestazione?

Di seguito si riporta la schermata di stampa della struttura dell'intestazione della richiesta con il browser:

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

sarei anche grato se qualcuno ha suggerito un modo per memorizzare dei cookie dalla risposta (quando le fa la domanda una richiesta http: xxx.xxx.xxx/login? username = xxx & password = xxx il cookie viene creato e deve essere memorizzato per richieste future).

risposta

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

Poi si riutilizza questo CookieContainer nelle richieste successive:

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

Io non capisco davvero. Perché dovresti mettere un cookiecontainer appena creato (quindi è vuoto) nella richiesta che stai per inviare? Non dovrebbe essere molto più logico che tu debba riempire più tardi quel cookieContainer con la risposta? C'è una ragione è così? modifica: Molte risposte sono date in questo modo, ma non riesco a capire perché è fatto in questo modo. – deltu100

+0

La mia applicazione ha un comportamento indesiderato che usa quello. Usando httpWebRequest2.Headers.Set ("Cookie", ... funziona bene – Eduardo

+0

Se ho già effettuato l'accesso alla pagina Web, c'è un cookie memorizzato sul mio HD in modo da poter saltare l'accesso in modo programmatico. la richiesta web cerca automaticamente e popola il contenitore con i cookie trovati, o devi farlo manualmente? Come si fa a farlo, se quest'ultimo? –

Problemi correlati