3

このサイトの記事を検索して、自分が達成しようとしていることを正確に見つけようとしましたが、今のところうまくいきません。クライアント側アプリケーションで Web 要求を実行していますが、プロキシ経由で動作することを確認したいと考えています。テスト用のプロキシ サーバーとして機能するように Fiddler2 をセットアップし、強制的に認証を要求しています。

私は基本的にプロキシを使用する方法を理解しました:

    Dim proxy As IWebProxy = WebRequest.GetSystemWebProxy()
    webService.Proxy = proxy

また、プロキシへの適切な資格情報を取得しようとしました

    webService.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials

また、これを構成セクションの下の app.config に追加します。

    <system.net>
        <defaultProxy useDefaultCredentials="true" />
    </system.net>

どちらの場合も、同じ Web 例外が発生します。

    The request failed with HTTP status 407: Proxy Auth Required.

Fiddler2 のプロキシにはユーザー名 1 とパスワード 1 があり、これらを資格情報としてプログラムで要求に与えると、要求は正常に認証されます。ただし、プロキシ情報を取得しているように、IE から資格情報を取得できない理由はありますか?

Fiddler のプロキシも、これが機能する方法の例外ですか? Windows認証を使用する通常のプロキシは、資格情報を取得しようとした方法で問題ありませんか?簡単にテストできる方法はありますか?

4

1 に答える 1

2

すべてではありませんが、認証を必要とするほとんどのプロキシは、現在のユーザーの Windows ログイン資格情報を使用します。結果として、通常は DefaultCredentials を使用するのが適切です。

そうは言っても、プロキシがカスタム資格情報を要求する可能性があり (たとえば、Fiddler は "1:1" を要求します)、その場合、コードがそれらの資格情報が何であるかを実際に知る方法はありません。CredMan にターゲット プロキシ レルムの資格情報が保存されているかどうかを確認するように依頼することは運がよいかもしれませんが、これはうまくいかないことがよくあります (実際にそうであると仮定して) 原則として、IE は資格情報を永続的に保存しないため、通常、資格情報を「IE に要求」することはできません。代わりに、セッションの最初の要求でユーザーにプロンプ​​トを表示し、そのセッションの存続期間中、それらをメモリに保持します。

ソフトウェアがそのようなプロキシを使用する環境で実行されることが予想される場合は、HTTP/407 応答をトラップし、プロキシ資格情報をユーザーに要求する必要があります。これは、再試行時に要求に手動で追加できます。

このトピックの議論については、私のIEInternalsブログ投稿を参照してください。

于 2013-02-01T23:23:00.823 に答える