C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: WebClient継承クラスでプロキシ認証エラー


(過去ログ 116 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■68287 / inTopicNo.1)  WebClient継承クラスでプロキシ認証エラー
  
□投稿者/ アタタ (1回)-(2013/10/07(Mon) 16:48:14)

分類:[VB.NET/VB2005 以降] 

言語:VB 2008

WebBrowserに表示されているWebページ上にPDFのリンク(このPDFはWeb側で動的に作成)があり、
このPDFを自動的にダウンロード出来るようなソフトを作成しているのですが、
ある環境からダウンロードしようとすると、ダウンロードの所で、

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

他の環境ではこのようなエラーは見られません。

コードは以下の通りで、ダウンロード時にクッキーをセットできるよう、WebClientを継承したクラスを用いています。

Dim wb_cookies as String = (WebBrowserから取得した該当サイトのクッキー)
Dim url as Uri = (WebBrowser上に表示のページのUri)
Dim ccn As New CookieContainer
ccn.SetCookies(url, Replace(wb_cookies, ";", ","))

Using wc As New WebClientEx    '定義は以下参照
    wc.CookieContainer = ccn
    wc.Proxy = System.Net.WebRequest.DefaultWebProxy
    wc.DownloadFile("pdfのURL", fileName)    '←ここでエラー
End Using


'WebClientExクラス
Private Class WebClientEx
    Inherits WebClient

    Private _ccn As CookieContainer

    Public Property CookieContainer() As CookieContainer
        Get
            Return _ccn
        End Get
        Set(ByVal value As CookieContainer)
            _ccn = value
        End Set
    End Property

    Protected Overrides Function GetWebRequest(ByVal uri As Uri) As WebRequest
        Dim wrq As WebRequest = MyBase.GetWebRequest(uri)

        If TypeOf wrq Is HttpWebRequest Then
            Dim hrq As HttpWebRequest = DirectCast(wrq, HttpWebRequest)
            hrq.CookieContainer = _ccn
        End If

        Return wrq
    End Function
End Class


なお、このWebサイト上のPDFをこちらのソフトでダウンロード出来るようにすることについては、
こちらのサイトのオーナーより承認を頂いています。

どうぞ宜しくお願いします。

引用返信 編集キー/
■68288 / inTopicNo.2)  Re[1]: WebClient継承クラスでプロキシ認証エラー
□投稿者/ WebSurfer (72回)-(2013/10/07(Mon) 16:55:36)
No68287 (アタタ さん) に返信
> 言語:VB 2008
>
> WebBrowserに表示されているWebページ上にPDFのリンク(このPDFはWeb側で動的に作成)があり、
> このPDFを自動的にダウンロード出来るようなソフトを作成しているのですが、
> ある環境からダウンロードしようとすると、ダウンロードの所で、
>
> 「System.Net.WebException: リモート サーバーがエラーを返しました: (407) プロキシ認証が必要です」
> というエラーが出てしまいます。
>
> 他の環境ではこのようなエラーは見られません。

「ある環境」と「他の環境」はどう異なるのでしょう。具体的に(あくまで具体的に)説明
していただけないでしょうか?
引用返信 編集キー/
■68289 / inTopicNo.3)  Re[1]: WebClient継承クラスでプロキシ認証エラー
□投稿者/ 魔界の仮面弁士 (364回)-(2013/10/07(Mon) 17:14:19)
No68287 (アタタ さん) に返信
> 「System.Net.WebException: リモート サーバーがエラーを返しました: (407) プロキシ認証が必要です」
> というエラーが出てしまいます。
> 他の環境ではこのようなエラーは見られません。

Fiddler などのローカルプロキシを経由させてみて、
正常にダウンロードできる場合(例:Internet Explorer)と、
ダウンロードエラーになる場合(自作アプリのWebClientEx)とで
どのような違いがあるのか、比較してみては如何でしょうか。
引用返信 編集キー/
■68293 / inTopicNo.4)  Re[2]: WebClient継承クラスでプロキシ認証エラー
□投稿者/ アタタ (2回)-(2013/10/08(Tue) 10:19:29)
No68289 (魔界の仮面弁士 さん) に返信
> ■No68287 (アタタ さん) に返信
>>「System.Net.WebException: リモート サーバーがエラーを返しました: (407) プロキシ認証が必要です」
>>というエラーが出てしまいます。
>>他の環境ではこのようなエラーは見られません。
>
> Fiddler などのローカルプロキシを経由させてみて、
> 正常にダウンロードできる場合(例:Internet Explorer)と、
> ダウンロードエラーになる場合(自作アプリのWebClientEx)とで
> どのような違いがあるのか、比較してみては如何でしょうか。

魔界の仮面弁士さま、アドバイスありがとうございます。
早速、以下の「Fiddler の簡単な使い方」を参考に、Fiddler2をインストールし、
Fiddler2を起動した状態と起動しない状態とで動作を比較しましたが、
こちらの環境ではどちらも正常にダウンロード処理が終わりました。

http://www.websec-room.com/2013/02/21/143

Fiddlerの使い方が悪いのでしょうか?
あと、問題の発生する環境では、WebBrowser上のPDFのリンクをクリックすると
WebBrowser上に該当のPDFが問題なく表示されます。
「プロキシ認証が必要です」とのことなので、プロキシが問題のようですが、
WebBrowser(あるいはIE)とWebClientでのプロキシに関する振る舞いの違いは何なのでしょうか?
あるいは、プロキシについては勉強不足なので、どのようなことを確認すればいいのでしょうか?

どうぞ宜しくお願いします。
引用返信 編集キー/
■68294 / inTopicNo.5)  Re[2]: WebClient継承クラスでプロキシ認証エラー
□投稿者/ アタタ (3回)-(2013/10/08(Tue) 10:33:19)
No68288 (WebSurfer さん) に返信
> ■No68287 (アタタ さん) に返信
>>言語:VB 2008
>>
>>WebBrowserに表示されているWebページ上にPDFのリンク(このPDFはWeb側で動的に作成)があり、
>>このPDFを自動的にダウンロード出来るようなソフトを作成しているのですが、
>>ある環境からダウンロードしようとすると、ダウンロードの所で、
>>
>>「System.Net.WebException: リモート サーバーがエラーを返しました: (407) プロキシ認証が必要です」
>>というエラーが出てしまいます。
>>
>>他の環境ではこのようなエラーは見られません。
>
> 「ある環境」と「他の環境」はどう異なるのでしょう。具体的に(あくまで具体的に)説明
> していただけないでしょうか?

WebSurferさま、書き込みありがとうございます。

「具体的に」とのことですが、具体的にはどのような情報を求めていらっしゃいますか?
例えば、エラーの発生する環境のプロキシ認証方法とか、そういうものでしょうか?
(それについては、このツールを使おうとしている人では分からず、その人の会社のネットワーク管理部門に
聞かなければいけないと思いますが、うまく聞き出せるかどうか不明です。)

逆に、こちらでは何を確認すればいいのかさっぱり分からないので、どのようなことを確認すればいいかを教えて頂けるとありがたいです。
もちろん、今回のエラーの原因として何が想定されるかについて、教えて頂ければ非常にうれしいです。
引用返信 編集キー/
■68295 / inTopicNo.6)  Re[3]: WebClient継承クラスでプロキシ認証エラー
□投稿者/ WebSurfer (73回)-(2013/10/08(Tue) 11:43:59)
No68294 (アタタ さん) に返信
> 「具体的に」とのことですが、具体的にはどのような情報を求めていらっしゃいますか?
> 例えば、エラーの発生する環境のプロキシ認証方法とか、そういうものでしょうか?
> (それについては、このツールを使おうとしている人では分からず、その人の会社のネットワーク管理部門に
> 聞かなければいけないと思いますが、うまく聞き出せるかどうか不明です。)
>
> 逆に、こちらでは何を確認すればいいのかさっぱり分からないので、どのようなことを確認すればいいかを教えて頂けるとありがたいです。
> もちろん、今回のエラーの原因として何が想定されるかについて、教えて頂ければ非常にうれしいです。

想像で回答して、想像が違っていると混乱するばかりなので聞いたの
ですが・・・

あえて想像すると、以下の通りです。

「ある環境」(407 エラーになる方)とは、社内のイントラから社外
のインターネット上の Web サーバーに接続するようなケースで、必ず
社内のプロキシサーバーを経由する環境。

「他の環境」とは、上記のような制限はなく、ツールから直接 Web
サーバーにアクセスできる環境。

「ある環境」のプロキシサーバーでは、その社内のルールに従って
アクセス制限を設けているはずで、それに今回引っかかったという
ことではないかと想像しています。

であれば、その社内のネットワーク管理者の人に、アクセス制限を
回避する方法を聞いて、その通りするほかないと思います。
引用返信 編集キー/
■68296 / inTopicNo.7)  Re[4]: WebClient継承クラスでプロキシ認証エラー
□投稿者/ アタタ (4回)-(2013/10/08(Tue) 14:26:31)
> あえて想像すると、以下の通りです。
>
> 「ある環境」(407 エラーになる方)とは、社内のイントラから社外
> のインターネット上の Web サーバーに接続するようなケースで、必ず
> 社内のプロキシサーバーを経由する環境。
>
> 「他の環境」とは、上記のような制限はなく、ツールから直接 Web
> サーバーにアクセスできる環境。
>
> 「ある環境」のプロキシサーバーでは、その社内のルールに従って
> アクセス制限を設けているはずで、それに今回引っかかったという
> ことではないかと想像しています。
>
> であれば、その社内のネットワーク管理者の人に、アクセス制限を
> 回避する方法を聞いて、その通りするほかないと思います。

WebSurferさま、アドバイスありがとうございます。

その後、色々と確認したところ、その問題の発生する環境では、IE使用時には特に認証操作が発生しないとのことですが、
単にWebClientにIEのプロキシ情報を割り当てただけではだめで、認証情報が必要ということでしょうか?
(例えば、Windowsのログインでのアカウント認証がそのままプロキシ認証に使われる、ということはありますか?)

また、こういった環境下で、プロキシを介さないようにしてWebClientを使うと、
やはりエラーになるのでしょうか?
引用返信 編集キー/
■68299 / inTopicNo.8)  Re[5]: WebClient継承クラスでプロキシ認証エラー
□投稿者/ WebSurfer (74回)-(2013/10/08(Tue) 15:03:42)
No68296 (アタタ さん) に返信
> その後、色々と確認したところ、その問題の発生する環境では、IE使用時には特に認証操作が発生しないとのことですが、

これも想像ですが、Active Directory を利用したドメイン環境で、統合 Windows 認証を利用した
シングルサインオンが実現されているというようなことではないかと思います。


> 単にWebClientにIEのプロキシ情報を割り当てただけではだめで、認証情報が必要ということでしょうか?
> (例えば、Windowsのログインでのアカウント認証がそのままプロキシ認証に使われる、ということはありますか?)

「IE のプロキシ情報」とか意味不明ですが、何にせよ、その会社のネットワーク管理者でもない私に
そのようなことを聞いてもらっても分かりません。

可能性としては、WebClient.Credentials プロパティを使ってネットワーククレデンシャルを設定して
やれば通るかもしれませんが、保証の限りではないです。

> また、こういった環境下で、プロキシを介さないようにしてWebClientを使うと、
> やはりエラーになるのでしょうか?

普通の会社なら、イントラからインターネットの Web サーバーには、プロキシを通さないアクセスは
許可しないと思います。

その会社のルールに関わることだと思いますので、勝手なことはしないで、その会社のネットワーク
管理者と相談することをお勧めします。

これ以上は、たぶん、ここで何を聞いても情報は得られないと思いますよ。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -