5

ターゲット Web サーバー エラーではなく、Web プロキシ エラーが原因で WebRequest が失敗したことを検出する方法は?

try
{
    var request = (HttpWebRequest)WebRequest.Create("http://www.example.com");
    request.Proxy = new WebProxy("localhost");
    var response = request.GetResponse();

    return response.GetResponseStream();
}
catch(WebException webex)
{
    //Detect proxy failure
}
4

2 に答える 2

3

それは難しい。以下にいくつかの提案を示します。

  • webex.Response.ResponseUriプロパティには、接続しようとしていたサーバーではなく、プロキシ サーバーの URI が含まれています。
  • webex.Response.StatusCodeプロパティは、常にプロキシの問題を参照するものProxyAuthenticationRequiredです。残念ながら、ほとんどのステータスは、プロキシ エラーまたはサーバー エラーのいずれかを示しています。
  • コレクションには、webex.Response.Headersプロキシ サーバーによって生成されたと認識できる非標準のエントリが含まれています。たとえば、Squid プロキシは、"X-Squid-Error"独自のステータス セットを含むヘッダーを返します。
  • webex.Response.ResponseStreamストリームには、プロキシ サーバーによって生成されたと認識できる形式の HTML またはプレーン テキストのエラー メッセージが含まれています。プロキシ サーバーの URI が含まれているかどうかをテストする場合があります。

catch ブロックでは、WebException上記のすべてのプロパティを含む、オブジェクトの完全な詳細をログに記録してください。その後、ログ データを分析し、プロキシ エラーの正確なテストを作成できます。

于 2010-01-26T10:08:11.290 に答える
1

InvalidOperationException をキャッチしてから、「プロキシ」のメッセージを確認できると思います。

メッセージは次のようになります。

プロキシ名を解決できませんでした: 'localhost'

于 2009-09-24T22:55:51.323 に答える