Frage

Gibt es eine Möglichkeit, die Cookies zu lesen / schreiben, dass ein WebBrowser-Steuerelement verwendet?

Ich tue so 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);  
War es hilfreich?

Lösung

das Web-Browser-Steuerelement verwendet WinInet für die Vernetzung, insbesondere die InternetSetCookie verwenden (Ex) und InternetGetCookie (Ex) Funktionen für die Verwaltung von Cookies. Es gibt keine WinInet-Wrapper in .NET, aber man kann p-invoke.

Andere Tipps

Eine der potenziell verwirrend Dinge über die WebBrowser Kontrolle und Cookies ist, dass auf den ersten Blick, ist es oft Aussehen wie Ihre App einen separaten Cookie Store bekommt. Zum Beispiel, wenn Sie in eine Website anmelden, dass speichert ein permanentes Cookie Sie zu identifizieren, dann, ob Sie für diese Website angemeldet zu sein, erscheinen in von innen einer App die Steuerung Hosting unabhängig sein wird, ob Sie scheinen in via Internet Explorer angemeldet zu sein, .

In der Tat können Sie sogar mit unterschiedlichen Identitäten angemeldet sein.

Doch obwohl es könnte natürlich sein, den Schluss zu ziehen, dass jede App, die WebBrowser Hosting daher seine eigenen Cookies bekommt, in der Tat, das ist nicht wahr. Es gibt nur zwei Arten von Cookies: die verwendeten diejenigen in ‚niedriger Integrität‘ Modus (das ist, was IE in standardmäßig ausgeführt wird), und der andere Satz, das ist, was man in einem normalen App bekommen, dass Hosts die WebBrowser und auch was Sie bekommen, wenn Sie IE erhöht ausgeführt werden.

Ja, Sie haben Recht, InternetGetCookieEx ist der einzige Weg, Httponly-Cookies abzurufen, und es ist die bevorzugte Art und Weise zu greifen Cookie von WebBrowser-Steuerelement.

gab ich ein vollständiges Beispiel hier

Sie können mit Application.GetCookie und Application.SetCookie Methoden.

Obwohl die Anwendung mehr oder weniger auf WPF bezogen, können Sie diese Methoden in jedem Desktop-.NET-Code verwenden. In der Tat sind sie Wrapper auf InternetGetCookieEx und InternetSetCookieEx Windows-APIs.

stand ich das gleiche Problem vor ein paar Tagen. Neben den Beispielen für die bisherigen Antworten, hier ist ein Win32-Wrapper für das WebBrowser-Steuerelement. Der Vorteil dieser Implementierung ist, dass es mehr Möglichkeiten, dass das Standard-Webbrowser-Steuerelement verfügbar macht.

Leider wenn es nicht WPF nativer, so dass Sie einen Wrapper zu schaffen, wenn Sie planen, es in WPF zu verwenden.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top