Frage

Wie erkennen, dass ein WebRequest konnte aufgrund eines Web-Proxy-Fehler und kein Ziel-Web-Server-Fehler?

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
}
War es hilfreich?

Lösung

Es ist schwierig. Hier sind einige Vorschläge:

  • Die webex.Response.ResponseUri Eigenschaft enthält den URI des Proxy-Servers anstelle des Servers zu kontaktieren versuchten.
  • Die webex.Response.StatusCode Eigenschaft ist eine, die immer bezieht sich auf ein Proxy-Problem, z.B. ProxyAuthenticationRequired. Leider sind die meisten Zustände entweder an einen Proxy-Fehler oder einen Serverfehler beziehen könnte.
  • Die webex.Response.Headers Sammlung enthält Nicht-Standard-Einträge, die Sie erkennen, wie von Ihrem Proxy-Server generiert wird. Zum Beispiel gibt den Squid-Proxy den Header "X-Squid-Error" mit seinem eigenen proprietären Satz von Status.
  • Der webex.Response.ResponseStream Strom enthält eine HTML oder Nur-Text-Fehlermeldung in einem Format, das Sie erkennen, wie von Ihrem Proxy-Server generiert wird. Sie könnten testen, um zu sehen, ob es die URI des Proxy-Servers enthält.

In Ihrem catch-Block, stellen Sie sicher, dass Sie alle Einzelheiten des WebException Objekt einzuloggen, einschließlich aller oben genannten Eigenschaften. Anschließend können Sie die Protokolldaten analysieren und einen genauen Test für die Proxy-Fehler entwickeln.

Andere Tipps

Ich glaube, Sie InvalidOperationException fangen konnte und dann die Nachricht prüfen „Proxy“.

Die Nachricht würde sagen:

Der Proxy-Name nicht aufgelöst werden kann: 'localhost'

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top