Verwalten von cookies in einer WPF WebBrowser-control?
Gibt es eine Möglichkeit zum Lesen/schreiben der cookies, die ein WebBrowser-Steuerelement verwendet?
Bin ich etwas wie dieses...
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);
Du musst angemeldet sein, um einen Kommentar abzugeben.
das webbrowser-Steuerelement verwendet WinInet für die Vernetzung, speziell die Nutzung der InternetSetCookie(Ex) und InternetGetCookie(Ex -) Funktionen zur Verwaltung von Cookies. Gibt es nicht eine WinInet-wrapper in .Net, aber Sie können p-invoke.
Einer der potenziell verwirrende Dinge über die
WebBrowser
Kontrolle und cookies ist, dass auf den ersten Blick, ist es oft sieht wie Ihre app wird, bekommt einen eigenen cookie-Speicher. Zum Beispiel, wenn Sie sich in einer Website, speichert ein dauerhaftes cookie, um Sie zu identifizieren, dann, ob Sie angezeigt werden angemeldet für die Website in einer app-hosting das Steuerelement wird unabhängig davon, ob Sie zu sein scheinen angemeldet über Internet Explorer.In der Tat, Sie können sogar angemeldet sein, mit verschiedenen Identitäten.
Jedoch, obwohl, es könnte natürlich sein, um den Schluss ziehen, dass jede app hosting der
WebBrowser
erhält somit seine eigenen cookies, in der Tat, das ist nicht wahr. Es sind nur zwei Sätze von cookies: diejenigen, die in "low integrity" - Modus (das ist, was der IE läuft im Standard), und das andere, das ist es, was Sie in einem normalen app hostet dieWebBrowser
- und auch das, was Sie erhalten, wenn Sie ausführen, DH erhöht.Ja du hast Recht, InternetGetCookieEx ist die einzige Möglichkeit zum abrufen von HttpOnly-cookies und es ist der bevorzugte Weg zu schnappen cookie vom WebBrowser-Steuerelement.
Ich habe eine komplette Beispiel hier
Können Sie - Anwendung.GetCookie und - Anwendung.SetCookie Methoden.
Obwohl die Anwendung ist mehr oder weniger mit WPF, Sie können diese Methoden verwenden, in jedem desktop .NET-code. In der Tat, Sie sind Wrapper auf InternetGetCookieEx und InternetSetCookieEx Windows-APIs.
Ich Stand vor dem selben Problem vor paar Tagen.
Neben den Beispielen für die bisherigen Antworten, hier ist eine Win32-wrapper für das WebBrowser-Steuerelement. Der Vorteil dieser Implementierung ist, dass es macht mehr Optionen, die der Standard-WebBrowser-Steuerelement.
Leider, wenn Es nicht WPF-native, so dass Sie zum erstellen eines wrappers wenn Sie planen, verwenden Sie es in WPF.
http://code.google.com/p/csexwb2/