2010-11-20 22 views
6

Sto utilizzando WebBrowser control per navigare attraverso una pagina di accesso e scaricare un file. Dal momento che non riesco a trovare un modo per gestire il download automaticamente con il controllo sto usando la classe WebClient per cercare di ottenere questo.Controllo download WebBrowser file nella sessione

Il problema è che poiché lo WebClient non è nello stesso contesto/sessione del browser, tutto quello che sto scaricando è la schermata Errore di sicurezza.

Qualche idea su come posso passare il contesto della sessione WebBrowser allo WebClient?

+0

Una risposta in ritardo per riferimenti futuri: 'URLDownloadToCacheFile' [può essere utilizzato per questo] (http://stackoverflow.com/a/19025793/1768303). – Noseratio

risposta

3

Dovrebbe essere semplicemente una questione di emulare i cookie e le intestazioni nella sessione WebBrowser e riutilizzarli per impersonare la sessione in WebClient, ma sembra che tu stia già scaldando su quel percorso.

Ecco come procedere.

  1. Ottieni cookie e intestazioni da WebBrowser.

    Cookie: è possibile ottenere i cookie dalla sessione di WebBrowser gestendo l'evento DocumentCompleted del controllo WebBrowser e analizzando il set di cookie dall'evento DocumentCompleted.

    Intestazioni: utilizzare un proxy come Fiddler [www.fiddler2.com/] per leggere le intestazioni in modo da sapere cosa è richiesto dal server.

  2. Utilizzare l'identità raccolta sopra per WebClient.

    intestazioni: scorrere tutte le intestazioni raccolti ed essere sicuri che stanno utilizzando added to the webclientmyWebClient.Headers.Add("Content-Type","application/x-www-form-urlencoded"); ad esempio

    Cookies: Vedere this post.

+0

Ho iniziato a provare questo. Ci vorrà un po 'di tempo ma ti farò sapere come vado. Grazie –

+0

questo ha funzionato, grazie –

11

Dopo una settimana su google per cercare una soluzione, ne ho trovato uno così semplice!

Io come scaricare in modo invisibile un file in un URL HTTPS e un controllo del browser solo eseguire questa operazione.

1) Accedi utilizzando il browser 2) utilizzare questo codice per il download.

//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); 

E 'risolto il problema

+1

Grazie! In realtà ho lavorato. Mi hai salvato un sacco di tempo. –

+0

Hai protetto la mia vita con i coockies !! –

Problemi correlati