2009-03-16 13 views
9

jestem z zalogowaniem się do serwisu za pomocą przeglądarki internetowej, a następnie chcę użyć regex, aby uzyskać pewne dane, ale WebRequest zrobił wykorzystanie web Przeglądaj cookieC# WebRequest przy użyciu WebBrowser ciasteczko

mój WebBrowser jest publicznie, jest jakiś sposób na użycie cookie WebBrowser w webRequest?

+0

bardzo proste Chcę go używać do otrzymywania wiadomości :) ale strona chroniona przez stronę logowania, więc w ten sposób najłatwiej zalogować się :) – madman

Odpowiedz

7

Możesz użyć CookieContainer do Webrequest.

web_cookies = new CookieContainer(); 
// Create a 'WebRequest' object with the specified url.     
HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(url); 

myWebRequest.CookieContainer = web_cookies; 

Mam nadzieję, że to pomoże.

OK, chcesz się zalogować. To inna historia. Możesz użyć NetworkCredential do tego.

public string get_secure_webpage(string url, string username, string password) 
    { 
     WebRequest myWebRequest = WebRequest.Create(url); 
     NetworkCredential networkCredential = new NetworkCredential(username, password); 
     myWebRequest.Credentials = networkCredential; 

...

+0

Czy możesz dodać komentarz do tego kodu? Nie mogę oderwać – madman

+1

Nie jestem dokładnie pewien, co chcesz zrobić. Może ta strona pomoże: http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.cookiecontainer.aspx – TalkingCode

+2

W rzeczywistości większość witryn korzysta z plików cookie w celu uwierzytelniania zamiast uwierzytelniania HTTP, więc użycie networkCredential nie pomoże. Dołączenie kontenera z ciasteczkami będzie działało tak długo, jak długo będzie pobierać pliki cookie IE; jeśli nie, PInvoke do InternetGetCookie() – EricLaw

12
public CookieContainer GetCookieContainer() 
    { 
     CookieContainer container = new CookieContainer(); 

     foreach (string cookie in webBrowser1.Document.Cookie.Split(';')) 
     { 
      string name = cookie.Split('=')[0]; 
      string value = cookie.Substring(name.Length + 1); 
      string path = "/"; 
      string domain = ".google.com"; //change to your domain name 
      container.Add(new Cookie(name.Trim(), value.Trim(), path, domain)); 
     } 

     return container; 
    } 

To będzie działać na większości stron jednak strony używające subdomen może być problem.

+3

To rozwiązanie nie działa, ponieważ pliki cookie używają modyfikatora "httponly". Dzięki temu są niewidoczne ze skryptów. –

+0

Możesz uzyskać dostęp do plików cookie HttpOnly przez InternetGetCookieEx –

0

czy to jest silverlight? jeśli tak, ponieważ silverlight 3, jeśli używasz stosu sieciowego przeglądarki, powinieneś pobrać ciasteczka za darmo. Domyślnie otrzymujesz stos przeglądarki podczas tworzenia n HttpWebrequest za pomocą metody WebRequest.Create(). Uwaga: jeśli używasz metody CreateHTTP, otrzymasz stos klienta, który domyślnie nie zawiera plików cookie przeglądarki (musisz zrobić sztuczkę, aby je uzyskać, jak opisano wcześniej)

zobacz http://msdn.microsoft.com/en-us/library/dd920295(VS.95).aspx o stosach sieci w silverlight od wersji 3