Domanda

C'è un modo per leggere / scrivere i cookie che un utilizza il controllo WebBrowser?

che sto facendo qualcosa di simile ...

string resultHtml;
HttpWebRequest request = CreateMyHttpWebRequest(); // fills http headers and stuff
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
    resultHtml = sr.ReadToEnd();
}
WebBrowser browser = new WebBrowser();
browser.CookieContainer = request.CookieContainer; // i wish i could do this :(
browser.NavigateToString(resultHtml);  
È stato utile?

Soluzione

controllo WebBrowser utilizza WinInet per la rete, in particolare utilizzare le funzioni InternetSetCookie (Ex) e InternetGetCookie (Ex) per la gestione del biscotto. Non c'è un involucro WinInet in Net, ma si può p-Invoke.

Altri suggerimenti

Una delle cose potenzialmente confusione circa il controllo WebBrowser e biscotti è che a prima vista, spesso Look come la vostra applicazione ottiene un negozio di biscotto separata. Ad esempio, se si accede a un sito che memorizza un cookie persistente per identificare l'utente, quindi se sembrate essere loggato per quel sito dall'interno di un'applicazione che ospita il controllo sarà indipendente dal fatto che ti sembra di essere registrato tramite Internet Explorer .

In realtà, si può anche fare il login con diverse identità.

Tuttavia, anche se potrebbe essere naturale per trarre la conclusione che ogni applicazione che ospita il WebBrowser ottiene quindi i suoi propri cookie, nel fatto che non è vero. Ci sono solo due tipi di cookie: quelli utilizzati in modalità 'bassa integrità' (che è ciò che IE viene eseguito per impostazione predefinita), e l'altro insieme, che è quello che si otterrà in un'applicazione normale che ospita il WebBrowser e anche quello che si otterrà se si esegue IE elevato.

Sì hai ragione, InternetGetCookieEx è l'unico modo per recuperare i cookie HttpOnly ed è il modo preferito per afferrare cookie dal controllo WebBrowser.

Ho pubblicato un esempio completo qui

È possibile utilizzare Application.GetCookie e Application.SetCookie metodi.

Anche se L'applicazione è più o meno legati a WPF, è possibile utilizzare questi metodi in alcun codice NET desktop. In realtà, essi sono involucri su InternetGetCookieEx e InternetSetCookieEx API di Windows.

Ho affrontato lo stesso problema qualche giorno fa. Oltre agli esempi delle risposte precedenti, qui è un wrapper Win32 per il controllo WebBrowser. Il vantaggio di questa implementazione è che espone più opzioni che il controllo di default del browser web.

Purtroppo Se non lo è WPF nativa, in modo da avere per creare un wrapper se hai intenzione di usarlo in WPF.

http://code.google.com/p/csexwb2/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top