2009-03-16 11 views
9

sto accedendo un sito utilizzando un browser web, quindi voglio usare espressioni regolari per ottenere alcuni dati, ma webRequest uso non ha ancora web Sfoglia biscotto,C# WebRequest utilizzando browser web biscotto

il mio browser web è in pubblico, c'è qualche modo di usare il cookie WebBrowser in webRequest?

+0

davvero semplice voglio usarlo per ottenere notizie :) ma sito protetto dalla pagina di accesso, quindi in questo modo è più facile accedere :) – madman

risposta

7

È possibile utilizzare un CookieContainer per una richiesta Web.

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

myWebRequest.CookieContainer = web_cookies; 

Spero che questo aiuti.

Ok, vuoi fare il login. Questa è una storia diversa. È possibile utilizzare NetworkCredential per questo.

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

puoi aggiungere qualche commento a questo codice? Non posso undrestand – madman

+1

Non sono esattamente sicuro di quello che vuoi fare. Forse questa pagina aiuterà: http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.cookiecontainer.aspx – TalkingCode

+2

In realtà, la maggior parte dei siti Web utilizza i cookie per l'autenticazione piuttosto che l'autenticazione HTTP, quindi utilizzando un networkCredential non aiuterà. Il collegamento del contenitore dei cookie funzionerà fino a quando otterrà i cookie IE; in caso contrario, PInvoke to 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; 
    } 

Questo funziona sulla maggior parte dei siti, tuttavia i siti che utilizzano i sottodomini potrebbe essere un problema.

+3

Questa soluzione non sembra funzionare più a causa dei cookie che utilizzano il modificatore "httponly". Ciò li rende invisibili dagli script. –

+0

È possibile accedere ai cookie HttpOnly tramite InternetGetCookieEx –

0

questa luce argentata? in tal caso, dal momento che silverlight 3 se si utilizza la pila di rete del browser di quanto si dovrebbe ottenere i cookie gratuitamente. Per impostazione predefinita si ottiene lo stack del browser quando si crea n HttpWebrequest utilizzando il metodo WebRequest.Create(). nota se si utilizza il metodo CreateHTTP, si ottiene uno stack client, che non include i cookie del browser per impostazione predefinita (è necessario eseguire degli inganni per ottenerli, come descritto in precedenza)

vedere http://msdn.microsoft.com/en-us/library/dd920295(VS.95).aspx sulle pile di rete in silverlight dalla versione 3