Pergunta

Como detectar que um WebRequest falhou devido a um erro de proxy web e não um erro do servidor web alvo?

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

Solução

É difícil. Aqui estão algumas sugestões:

  • A propriedade webex.Response.ResponseUri contém o URI do servidor proxy em vez do servidor que você estava tentando contato.
  • A propriedade webex.Response.StatusCode é aquele que sempre refere-se a um problema de proxy, por exemplo, ProxyAuthenticationRequired. Infelizmente a maioria dos estados pode se referir a um erro de proxy ou um erro no servidor.
  • A coleção webex.Response.Headers contém entradas não-padrão que você reconhece como sendo gerado pelo seu servidor proxy. Por exemplo, o proxy Squid retorna o "X-Squid-Error" cabeçalho, com seu próprio conjunto de propriedade de status.
  • O fluxo webex.Response.ResponseStream contém um HTML ou mensagem de erro de texto simples em um formato que você reconhece como sendo gerado pelo seu servidor proxy. Você pode testar para ver se ele contém o URI do seu servidor proxy.

Em seu bloco captura, certifique-se de log maiores detalhes sobre o objeto WebException, incluindo todas as propriedades mencionadas acima. Você pode, então, analisar os dados de registro e desenvolver um teste exato para erros de proxy.

Outras dicas

Eu acho que você poderia pegar InvalidOperationException e, em seguida, verifique a mensagem de "proxy".

A mensagem dizia:

O nome do proxy não pôde ser resolvido: 'localhost'

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top