Detectar erro Proxy HTTP para WebRequest
-
16-09-2019 - |
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
}
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