Pregunta

¿Hay una manera de leer / escribir las cookies que unos usos de control WebBrowser?

Me estoy haciendo algo como esto ...

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);  
¿Fue útil?

Solución

el control WebBrowser utiliza WinInet para la red, use específicamente la InternetSetCookie (Ex) y funciones InternetGetCookie (Ex) para la gestión de la galleta. No hay un envoltorio de WinInet en .Net, pero se puede p-invoke.

Otros consejos

Una de las cosas que pueden llevar a confusión sobre el control WebBrowser y galletas es que, a primera vista, a menudo miradas como su aplicación obtiene una tienda de galletas separada. Por ejemplo, si inicia sesión en un sitio que almacena una cookie para identificarle, a continuación, si usted parece estar conectado para ese sitio desde el interior de una aplicación que aloja el control será independiente de si usted parece estar conectado a través de Internet Explorer .

De hecho, incluso se puede iniciar sesión con diferentes identidades.

Sin embargo, a pesar de que podría ser natural a la conclusión de que cada aplicación que aloja el WebBrowser por lo tanto, obtiene sus propias cookies, de hecho, eso no es cierto. Hay solamente dos conjuntos de cookies: las que se usan en el modo de 'baja integridad' (que es lo que se ejecuta en IE por defecto), y el otro conjunto, que es lo que puede encontrarse en una aplicación normal que los ejércitos, y también WebBrowser lo que se obtiene si ejecuta IE elevado.

Si usted tiene razón, InternetGetCookieEx es la única manera de recuperar cookies HttpOnly y es la mejor forma de galleta de agarre del control WebBrowser.

registró un ejemplo completo aquí

Puede utilizar Application.GetCookie y Application.SetCookie métodos.

A pesar de aplicación es más o menos relacionada con WPF, puede utilizar estos métodos en cualquier código de escritorio .NET. De hecho, son las envolturas en InternetGetCookieEx y InternetSetCookieEx API de Windows.

Me enfrenté al mismo problema hace unos días. Además de los ejemplos de las respuestas anteriores, aquí es un envoltorio de Win32 para el control WebBrowser. La ventaja de esta aplicación es que expone más opciones que el control WebBrowser por defecto.

Por desgracia, si no es nativo de WPF, por lo que tendrá que crear un contenedor si está planeando utilizar en WPF.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top