2010-06-04 29 views
23

Tworzę aplikację do pobierania danych ze strony internetowej. Strona jest chroniona hasłem i po zalogowaniu się użytkownika zostaje utworzony plik cookie.Jak korzystać z plików cookie za pomocą HttpWebRequest

Aby odzyskać dane, aplikacja musi się najpierw zalogować: utworzyć żądanie sieciowe z nazwą użytkownika i hasłem i zapisać plik cookie. Następnie, gdy plik cookie zostanie zapisany, należy go dodać do nagłówków wszystkich żądań.

tutaj jest metoda, która sprawia, że ​​wnioski i pobiera treść:

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

    } 

Czy ktoś wie jak zmodyfikować tę metodę, aby dodać cookie w nagłówku?

Poniżej znajduje się ekran drukowania struktury nagłówka wniosku złożonym z przeglądarki:

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

Byłbym też wdzięczny, gdyby ktoś zaproponował sposób na przechowywanie plików cookie z odpowiedzi (gdy uzależnia zastosowanie żądanie http: xxx.xxx.xxx/login? nazwa_użytkownika = xxx & hasło = xxx plik cookie jest tworzony i musi być przechowywany dla przyszłych żądań).

Odpowiedz

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

Następnie ponownie użyć tej CookieContainer w kolejnych żądań:

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

Nie rozumiem go właściwie. Dlaczego chcesz umieścić świeżo utworzony cookiecontainer (więc jest pusty) w żądaniu, które zamierzasz wysłać? Czy nie powinno być o wiele bardziej logiczne, że musisz wypełnić ten plik cookieContainer później z odpowiedzią? Czy jest jakiś powód, że tak to jest? edit: Wiele odpowiedzi jest udzielanych w ten sposób, ale nie mogę pojąć, dlaczego tak się dzieje. – deltu100

+0

Moja aplikacja ma niepożądane działanie. Korzystanie z httpWebRequest2.Headers.Set ("Cookie", ... działa dobrze. – Eduardo

+0

Jeśli wcześniej logowałem się na stronie, na moim dysku HD jest zapisany plik cookie, dzięki czemu mogę programowo pomijać logowanie. żądanie sieci automatycznie wyszukuje i wypełnia zawartość zawierającą znalezione pliki cookie, lub czy musisz to zrobić ręcznie? Jak to zrobić, jeśli to ostatnie? –

Powiązane problemy