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
}
¿Fue útil?

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
scroll top