Rileva errore di proxy HTTP per WebRequest
-
16-09-2019 - |
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
}
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 esempioProxyAuthenticationRequired
. 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