12

System.Net.WebClient クラスを使用するときに、プロキシ認証エラー (HTTP 407 ステータス コード) を確実に処理する方法を見つけようとしています。

現場では、多くのユーザーが 407 プロキシ認証 WebException を受け取っているのを目にしますが、適切なデフォルト戦略が何であるかはわかりません。.Net 2.0/3.5 では、プロキシ認証設定は Internet Explorer のシステム設定から継承されることになっています。Firefox、Opera、および Chrome は、これらの同じ設定を使用します。

使用している基本的なコードは次のとおりです。

using System.Net;

string url = "http://www.mysite.com";
WebClient webClient = new WebClient();
byte[] data = webClient.DownloadFile(url);

このコードが失敗すると、ユーザーのブラウザーを開き、ヘルプ ページに送信します。当社の Web ログから、これらの顧客がブラウザーで正常に接続できることがわかっています。ヘルプ ページにアクセスする前に、プロキシのユーザー名とパスワードを手動で入力している可能性があります。わかりません。

WebClient.UseDefaultCredentials を使用できるようですが、とにかく WebClient がシステム設定を使用している場合、これは冗長に思えます。

どんな助けでも大歓迎です。

4

3 に答える 3

11

プロキシ認証で BASIC または DIGEST が使用されている場合、Internet Explorer はプロキシ認証資格情報を永続的にキャッシュ/再利用しません。Negotiate/NTLM の場合、デフォルトの資格情報が提供されます。

したがって、.NET は IE の設定を継承しますが、たまたま IE で実行していない限り、Basic/Digest のプロキシ認証を「無料」でサポートすることはできません。ユーザーにプロンプ​​トを表示するか、構成画面を提供する必要があります。

Fiddler (www.fiddler2.com) には、テスト用にこのシナリオをシミュレートするために使用できる [Rules] メニューの [Request Proxy Authentication] オプションがあります。

于 2009-07-30T03:11:04.450 に答える
6

これは古い投稿ですが、SSIS 2008R2(SQL Server Integration Services)スクリプトタスク(VB.NETコード)でWebClientを使用してプロキシサーバー経由でSSL経由で保護されたリモートサイトにXMLファイルをダウンロードしようとすると同様の問題が発生しましたこれにも認証が必要でした。

解決策を見つけるのにしばらく時間がかかり、この投稿はプロキシ側で役立ちました。以下は私のために働いたスクリプトコードです。似たようなものを探している人に役立つかもしれません。

    Dim objWebClient As WebClient = New WebClient()
    Dim objCache As New CredentialCache()

    'https://www.company.net/xxxx/resources/flt
    Dim strDownloadURL As String = Dts.Variables("FileURL").Value.ToString

    'apiaccount@company.net
    Dim strLogin As String = Dts.Variables("FileLogin").Value.ToString

    'sitepassword
    Dim strPass As String = Dts.Variables("FilePass").Value.ToString

    'itwsproxy.mycompany.com
    Dim strProxyURL As String = Dts.Variables("WebProxyURL").Value.ToString

    '8080
    Dim intProxyPort As Integer = Dts.Variables("WebProxyPort").Value

    'Set Proxy & Credentials as a Network Domain User acc to get through the Proxy
    Dim wp As WebProxy = New WebProxy(strProxyURL, intProxyPort)
    wp.Credentials = New NetworkCredential("userlogin", "password", "domain")
    objWebClient.Proxy = wp

    'Set the Credentials for the Remote Server not the Network Proxy
    objCache.Add(New Uri(strDownloadURL), "Basic", New NetworkCredential(strLogin, strPass))
    objWebClient.Credentials = objCache

    'Download file, use Flat File Connectionstring to save the file
    objWebClient.DownloadFile(strDownloadURL, Dts.Connections("XMLFile").ConnectionString)
于 2012-12-04T11:49:44.153 に答える
6

ユーザーが「プロキシを使用」を選択できる構成ダイアログを追加することで、この問題を解決しました。この設定が完了すると、これらのパラメーター (アドレス、資格情報など) が使用されます。そうでない場合は、手動操作なしで接続できると見なされます。エラーが発生した場合は、次のことを行います: a.) デフォルトの資格情報を使用して再試行する b.) config の設定が役立つ情報をポップアップ表示する...

プロキシ認証が「既定の資格情報」 (Windows ユーザー) を介して行われる場合、IE は認証エラーにも反応し、この場合は既定の資格情報を送信します。これが機能しない場合は、資格情報ダイアログが開きます。すべてのブラウザーがこれをそのように処理するかどうかはわかりませんが、fiddler を使用して試してみることができるので、何が起こっているかを確認できます。

于 2009-07-29T20:21:44.277 に答える