Pergunta

Existe uma maneira de ler/gravar os cookies que um controle WebBrowser usa?

Estou fazendo algo assim...

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

Solução

O WebBrowser Control usa o Wininet para redes, use especificamente as funções InternetSetCookie (Ex) e InternetGetCookie (EX) para gerenciamento de cookies. Não há um invólucro Wininet no .NET, mas você pode fazer um p-invoke.

Outras dicas

Uma das coisas potencialmente confusas sobre o WebBrowser controle e cookies é que, à primeira vista, muitas vezes visual como se seu aplicativo tivesse um armazenamento de cookies separado.Por exemplo, se você fizer login em um site que armazena um cookie persistente para identificá-lo, se você parecer estar conectado nesse site a partir de um aplicativo que hospeda o controle será independente de você parecer estar conectado via Internet Explorer .

Na verdade, você pode até estar logado com identidades diferentes.

No entanto, embora possa ser natural tirar a conclusão de que cada aplicativo que hospeda o WebBrowser portanto, obtém seus próprios cookies; na verdade, isso não é verdade.Existem apenas dois conjuntos de cookies:aqueles usados ​​​​no modo de 'baixa integridade' (que é o que o IE executa por padrão) e o outro conjunto, que é o que você obterá em um aplicativo normal que hospeda o WebBrowser e também o que você obterá se executar o IE elevado.

Sim, você está certo, o InternetGetCookieEx é a única maneira de recuperar os cookies httponly e é a maneira preferida de pegar o Cookie do Webbrowser Control.

Eu postei um Exemplo completo aqui

Você pode usar Application.getCookie e Application.setCookie métodos.

Embora o aplicativo esteja mais ou menos relacionado ao WPF, você pode usar esses métodos em qualquer código .NET da área de trabalho. Na verdade, eles são embalagens InternetGetCookieEx e InternetsetCookieEx Windows APIs.

Eu enfrentei o mesmo problema há alguns dias. Além dos exemplos das respostas anteriores, aqui está um invólucro do Win32 para o controle WebBrowser. A vantagem desta implementação é que ela expõe mais opções que o controle padrão do WebBrowser.

Infelizmente, se não for o nativo do WPF, você precisará criar um invólucro se planeja usá -lo no WPF.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top