WebClientのプロキシ認証エラー

タグの編集
投稿者 ポニー  (社会人) 投稿日時 2014/7/11 12:19:38
WebBrowserとWebClientを使って、とあるサイト上にリンクされているPDFを
自動的にダウンロードするツールを作成しています。

やり方としては、とあるサイトをWebBrowser上に表示させ、
条件検索で表示されたページ内のリンク(Aタグ)より該当PDFのURLを取得し、
このURLを元にSystem.Net.WebClientでPDFのダウンロードを行っています。

ただし、ある人がこのツールを使った時に、PDFダウンロード操作でエラーが発生し
ソフトが終了してしまうという連絡をもらいました。
とりあえず、どのような状況なのか、ログを出力するような仕組みをツールに入れて
そのログを確認したところ、以下のような例外が発生しているようです。

System.Net.WebException: リモート サーバーがエラーを返しました: (407) プロキシ認証が必要です

WebBrowserでPDFのリンクのあるページを表示し、PDFのURLの取得までは
できているようですが、WebClientでのダウンロードに失敗しているようです。

その方はお勤め先でこのツールを使ったとのことですが、インターネットを使用の際には
特に認証の操作を行っていることはないとのことです。
もしかしたらWindowsログイン時の認証情報がプロキシ認証に使用されているのかも
知れませんが、このあたりのことはあまり詳しくありません。

この問題を解決するためには、一体どのようなことを勉強すればよいのでしょうか?
ヒントになるようなものでも結構ですので、アドバイスを頂けると幸いです。

以上、よろしくお願いします。
投稿者 るきお  (社会人) 投稿日時 2014/7/11 12:56:07
>インターネットを使用の際には特に認証の操作を行っていることはないとのことです。
その人の環境で、IEなどのWebブラウザーを使って
そのPDFと同じURLにアクセスした場合、認証を聞かれないでしょうか?

プロキシーの有無や、どのプロキシーサーバーを使うかなどは細かく設定できるため、
まったく同じ条件で確認するのが最もよいです。

>System.Net.WebException: リモート サーバーがエラーを返しました: (407) プロキシ認証が必要です
このエラーが発生している所から見て、
私は、上記検証を行うと認証を聞かれるはずだと思います。


いずれにせよ、エラーが認証情報が必要だという内容ですので、
WebClientのCredentialsプロパティかProxy.Credentialsプロパティに認証情報をセットする処理が必要になってくるかと思います。
投稿者 ヴァン  (社会人) 投稿日時 2014/7/11 16:10:56
こんにちは。

社内から外部にアクセスする場合はプロキシ経由することは結構あります。
るきおさんが言われる通りプロキシ設定を行うようにするか、
WebClient でなく Wininet を使ってアクセスするかが考えられます。
投稿者 ポニー  (社会人) 投稿日時 2014/7/11 16:38:09
皆さまありがとうございます。

るきおさま
先ほどその方に状況を確認しましたところ、
直接IEでそのPDFのURLを直接アドレスバーに入力すると、
PDFをダウンロードするかどうか聞いてきて、そのままPDFがダウンロードできるそうです。
(なお、この方はAdobe Readerでブラウザ内にPDFを表示しない設定にしているとのことです。)

ただし、インターネットアクセス時には何の認証も聞かれないとのことです。
(認証は、PC起動時のアカウント入力のみだそうです。)


ヴァンさま
プロキシ設定を行いたいのですが、インターネットアクセス時には
何の認証も聞かれないとのことなので、困ってしまいました。
Wininetというものを勉強し、これを使って検証したいのですが、
これがどういったものかよく分かっていません。
Wininetが解説されているサイトとなどは御座いますでしょうか?

以上、よろしくお願いします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2014/7/11 18:00:41
ちなみに、Internet Explorer でのプロキシ設定は、以下で行えます。
http://support.microsoft.com/kb/135982/ja


> ただし、ある人がこのツールを使った時に、PDFダウンロード操作でエラーが発生し
> ソフトが終了してしまうという連絡をもらいました。
エラーを返しているのはサーバー側ですので、詳細な URL 情報などが
分からないことには、具体的なことは言えませんが、たとえば、
User-Agent (ブラウザ情報)やクッキー情報などの相違により、
リクエストが拒否されたり、別の動作を発生させることはありえます。

可能であれば、「Fiddler」の導入を検討してみて下さい。
これを利用すると、HTTP 通信の内容を『横取り』して、どのようなやりとりが
交わされているのかを確認する事が出来ます。IE の場合とで何が違うのかを
調査する手助けになるかと思います。

なお、Fiddler に WebClient の情報を拾わせる方法については下記をご覧ください。
http://docs.telerik.com/fiddler/configure-fiddler/tasks/configuredotnetapp/
投稿者 ポニー   (社会人) 投稿日時 2014/7/14 12:15:32
魔界の仮面弁士さま、ありがとうございます。

Fiddlerというものを使ってみようと思いますが、
今回の問題を検証する方法としては、先方のPCにFiddlerをインストールし、
WebBrowserやWebClientのHTTP 通信の内容をモニタリングする、
という方法になりますでしょうか?
(先方がそれを許可してくれるかどうかは別問題として)

以上、よろしくお願いします。