System.Net.WebClientクラスを使用すると、プロキシ認証エラー(HTTP 407ステータスコード)を堅牢に処理する方法を解明しようとしています。System.Net.WebClientとプロキシ認証407エラー
フィールドでは、多くのユーザーが4035のプロキシ認証 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);
、私たちは、ユーザーのブラウザを開き、ヘルプ ページに送信します。 Googleのウェブログからは、これらのお客様が のブラウザに正常に接続できることがわかりました。ヘルプページにアクセスする前に、プロキシのユーザー名とパスワード( )を手動で入力している可能性がありますか?私たちは知らない。
WebClient.UseDefaultCredentialsを使用できるようですが、WebClientがシステム設定を使用している場合、この は冗長であるようです。
何か助けていただければ幸いです。
ありがとうエリック。フィドラーはうまくいく。 Negotiate/NTMLについては、UseDefaultCredentials = trueを設定したかどうかに関係なく、WebClientによってデフォルトの資格情報が提供されるのでしょうか?言い換えれば、407 WebExceptionを処理し、UseDefaultCredentials = trueを指定して再試行することに価値がありますか?なぜUseDefaultCredentials = trueを設定するだけではないのですか?セキュリティリスク? 意見の免責事項:WinInetはこれをはるかに上手く処理していたようです。宇宙の誰もがプロキシを横断しようとしているので、これを自動的に実行したり、イベントを起動したり、資格情報を入力/保存するための標準的なUIを提供してみませんか? – Daniel
私はFiddlerでもっと実験しました。私は以下のようにユーザー名とパスワード( "1"、 "1")を入力するだけで簡単だと思ったが、うまくいかなかった。 string url = "http://www.java.com/"; webClient = new WebClient(); CredentialCache cache =新しいCredentialCache();cache.Add(新しいUri(url)、 "Basic"、新しいNetworkCredential( "1"、 "1")); webClient.Proxy.Credentials = credentialCache; webClient.Credentials = credentialCache; 文字列contents = webClient.DownloadString(url); – Daniel
これは機能しています。何らかの理由でCredentialCacheが機能しませんでした。私はwebClient.Proxy.CredentialsにNetworkCredentialを渡さなければなりませんでした。 – Daniel