Detectar el error de proxy HTTP para WebRequest
-
16-09-2019 - |
Pregunta
Cómo detectar que un WebRequest falló debido a un error de proxy web y no un error en el servidor web de destino?
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
}
Solución
Es difícil. Aquí están algunas sugerencias:
- La propiedad
webex.Response.ResponseUri
contiene el URI del servidor proxy en lugar del servidor que estaba tratando de ponerse en contacto. - La propiedad
webex.Response.StatusCode
es uno que siempre se refiere a un problema de proxy, por ejemplo,ProxyAuthenticationRequired
. Desafortunadamente la mayoría de los estados podrían hacer referencia a un error de proxy o un error del servidor. - La colección
webex.Response.Headers
contiene entradas no estándar que usted reconoce como siendo generada por el servidor proxy. Por ejemplo, el proxy Squid devuelve el"X-Squid-Error"
de cabeza, con su propio conjunto de propiedad de estados. - La corriente
webex.Response.ResponseStream
contiene un archivo HTML o un mensaje de error de texto sin formato en un formato que reconoce como siendo generada por el servidor proxy. Es posible probar para ver si contiene el URI del servidor proxy.
En el bloque catch, asegúrese de que se conecte todos los detalles del objeto WebException
, incluyendo todas las propiedades mencionadas anteriormente. A continuación, puede analizar los datos de registro y desarrollar una prueba exacta de errores de proxy.
Otros consejos
Creo que se puede coger InvalidOperationException y luego compruebe el mensaje de "proxy".
El mensaje decía:
El nombre del proxy no se pudo resolver: 'localhost'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow