2010-11-20 106 views
6

WebBrowser controlを使用してログインページをナビゲートし、ファイルをダウンロードしています。コントロールを使ってダウンロードを自動的に管理する方法が見つからないので、これを試して達成するためにWebClientクラスを使用しています。WebBrowserコントロールのセッションでファイルをダウンロード

問題はWebClientは、ブラウザと同じコンテキスト/セッションではないので、私はダウンロードしているすべてのセキュリティエラー画面であるということです。

私はWebClientWebBrowserセッションのコンテキストを渡すことができる方法上の任意のアイデア?

+0

将来の参照のため後半の答えを私の問題を解決しました: 'URLDownloadToCacheFile'は、[このために使用することができます](http://stackoverflow.com/a/19025793/1768303)。 – Noseratio

答えて

3

WebBrowserセッションでクッキーとヘッダーをエミュレートし、WebClientでセッションを偽装するためにそれらを再利用するだけで、あなたはすでにそのパスで熱くなっているようです。

ここではどのように進めますか。

  1. WebBrowserからCookieとヘッダーを取得します。

    クッキー:あなたはWebBrowserコントロールのDocumentCompletedイベントを処理し、DocumentCompletedイベントからクッキーのセットを解析することによって、あなたのWebブラウザーセッションからクッキーを取得することができます。

    ヘッダ:あなたは、サーバーで必要なのか知っているだろうので、ヘッダを読み取るためのバイオリン弾き[www.fiddler2.com/]のようなプロキシを使用してください。

  2. Webクライアントのために上記の収集アイデンティティを活用。

    ヘッダ:すべてのあなたの収集のヘッダを反復処理し、彼らはadded to the webclient例えば

    クッキーmyWebClient.Headers.Add("Content-Type","application/x-www-form-urlencoded");を使用していることを確認:参照してくださいthis postを。

+0

私はこれをテストし始めました。それは少し時間がかかるだろうが、私はあなたが私がどのように行くかを知らせます。ありがとう! –

+0

ありがとう、ありがとう! –

11

解決策を試して1週間後、私はそれがとても簡単であることを見つけました!

黙っHTTPSのURLでファイルをダウンロードして、WebBrowserコントロールだけでこれを行うにはどのようなI君。

1)ウェブブラウザ 2を使用してログイン)をダウンロードするためにこのコードを使用します。

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

それは

+1

ありがとう!私は実際に働いた。あなたは私に多くの時間を救った。 –

+0

あなたはコックで私の人生を安全にしました! –

関連する問題