2010-11-20 20 views
6

Estoy usando WebBrowser control para navegar a través de una página de inicio de sesión y descargar un archivo. Como no puedo encontrar una forma de administrar la descarga automáticamente con el control, estoy usando la clase WebClient para intentar lograr esto.Archivo de descarga de WebBrowser Control en la sesión

El problema es que como el WebClient no está en el mismo contexto/sesión que el navegador, todo lo que descargo es la pantalla Error de seguridad.

¿Alguna idea sobre cómo puedo pasar el contexto de la sesión WebBrowser al WebClient?

+0

Una respuesta tardía para futuras referencias: 'URLDownloadToCacheFile' [se puede utilizar para este] (http://stackoverflow.com/a/19025793/1768303). – Noseratio

Respuesta

3

Debería ser simplemente una cuestión de emular las cookies y las cabeceras en la sesión WebBrowser y volver a utilizarlos para suplantar la identidad de la sesión de cliente Web, pero parece que ya está caliente en ese camino.

Así es como procedo.

  1. Obtenga cookies y encabezados de WebBrowser.

    Cookies: Puede obtener las cookies de su sesión WebBrowser manejando el evento DocumentCompleted del control WebBrowser y analizando el conjunto de cookies del evento DocumentCompleted.

    Encabezados: utilice un proxy como Fiddler [www.fiddler2.com/] para leer los encabezados, de esta forma sabrá lo que necesita el servidor.

  2. Utilice la identidad recopilada anteriormente para WebClient.

    encabezados: iterar a través de todas sus cabeceras recogidos y asegurarse de que están utilizando added to the webclientmyWebClient.Headers.Add("Content-Type","application/x-www-form-urlencoded"); por ejemplo

    Cookies: Ver this post.

+0

Empecé a probar esto. Tomará un poco de tiempo, pero te dejaré saber cómo voy. Gracias –

+0

esto funcionó, gracias –

11

Después de una semana buscando en Google una solución, ¡encontré una que es tan simple!

Lo que debe descargar silenciosamente un archivo en una URL HTTPS y un control de navegador web simplemente haga esto.

1) Inicie sesión con el navegador web 2) utilice este código para descargar.

//build de URL 

    string _url = "https://........." 

    //define a download file name and location 

    string _filename = @"C:\Users\John\Documents\somefile.pdf"; 

    //create a webcliente 

    WebClient cliente = new WebClient(); 

    //do some magic here (pass the webbrowser cokies to the webclient) 

    cliente.Headers.Add(HttpRequestHeader.Cookie, webBrowser1.Document.Cookie); 

    //and just download the file 

    cliente.DownloadFile(_urlpdf, _filename); 

Se resolvió mi problema

+1

¡Gracias! De hecho, trabajé. Me salvaste mucho tiempo. –

+0

¡¡¡Safed mi vida con los coockies !! –

Cuestiones relacionadas