Domanda

Come rilevare che un WebRequest riuscita a causa di un errore di proxy Web e non un errore del server web di destinazione?

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
}
È stato utile?

Soluzione

E 'difficile. Ecco alcuni suggerimenti:

  • La proprietà webex.Response.ResponseUri contiene l'URI del server proxy invece che al server che stavi cercando di contattare.
  • La struttura webex.Response.StatusCode è uno che sempre si riferisce ad un problema proxy, ad esempio ProxyAuthenticationRequired. Purtroppo la maggior parte stati potrebbero riferirsi sia un errore di proxy o un errore del server.
  • La collezione webex.Response.Headers contiene le voci non-standard che si riconoscono come generato dal server proxy. Ad esempio, il proxy Squid restituisce l'intestazione "X-Squid-Error", con il proprio insieme di proprietà di stati.
  • Il flusso webex.Response.ResponseStream contiene un messaggio di errore di testo HTML o in un formato che si riconosce come essere generati dal server proxy. Si potrebbe provare a vedere se contiene l'URI del server proxy.

Nel vostro blocco catch, assicurarsi che si accede tutti i dettagli dell'oggetto WebException, incluse tutte le proprietà di cui sopra. È quindi possibile analizzare i dati di log e di sviluppare un test accurato per gli errori del proxy.

Altri suggerimenti

Penso che si potrebbe prendere InvalidOperationException e quindi controllare il messaggio di "proxy".

Il messaggio diceva:

Il nome del proxy non può essere risolto: 'localhost'

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top