Question

Est-il possible de lire / écrire les cookies qui a des utilisations de contrôle WebBrowser?

Je suis en train de faire quelque chose comme ça ...

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);  
Était-ce utile?

La solution

le contrôle WebBrowser utilise WinInet pour la mise en réseau, utiliser spécifiquement les fonctions InternetSetCookie (Ex) et InternetGetCookie (Ex) pour la gestion des cookies. Il n'y a pas d'enveloppe de WinInet en .Net, mais vous pouvez p-Invoke.

Autres conseils

L'une des choses pouvant prêter à confusion sur le contrôle et les cookies WebBrowser est que, à première vue, il est souvent semble comme votre application devient un magasin de cookies séparé. Par exemple, si vous vous connectez à un site qui stocke un cookie persistant pour vous identifier, alors si vous semblez être connecté pour ce site à l'intérieur d'une application qui héberge le contrôle sera indépendamment du fait que vous semblez être connecté via Internet Explorer .

En fait, vous pouvez même être connecté avec des identités différentes.

Cependant, bien qu'il soit naturel de tirer la conclusion que chaque application hébergeant le WebBrowser obtient donc ses propres témoins, en fait, ce n'est pas vrai. Il y a seulement deux ensembles de cookies: ceux utilisés en mode « faible intégrité » (ce qui est ce que IE fonctionne par défaut), et l'autre ensemble, qui est ce que vous obtenez dans une application normale qui héberge le WebBrowser et aussi ce que vous aurez si vous exécutez IE élevé.

Oui, vous avez raison, InternetGetCookieEx est le seul moyen de récupérer les cookies HttpOnly et il est le meilleur moyen de saisir cookie du contrôle WebBrowser.

Je posté une exemple complet

Vous pouvez utiliser Application.GetCookie et Application.SetCookie méthodes .

Bien que l'application est plus ou moins liée à WPF, vous pouvez utiliser ces méthodes dans un code .NET de bureau. En fait, ils sont interfacées sur InternetGetCookieEx et InternetSetCookieEx API Windows.

Je face à la même question il y a quelques jours. Outre les exemples des réponses précédentes, voici un wrapper Win32 pour le contrôle WebBrowser. L'avantage de cette mise en œuvre est qu'il expose plus d'options que le contrôle par défaut du navigateur Web.

Malheureusement, si ce n'est pas natif WPF, vous devrez créer un emballage si vous avez l'intention de l'utiliser dans WPF.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top