Détecter les erreurs de proxy HTTP pour WebRequest
-
16-09-2019 - |
Question
Comment détecter qu'un WebRequest a échoué en raison d'une erreur de proxy Web et non une erreur de serveur Web cible?
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
}
La solution
Il est difficile. Voici quelques suggestions:
- La propriété
webex.Response.ResponseUri
contient l'URI de votre serveur proxy au lieu du serveur que vous essayez de contacter. - La propriété est
webex.Response.StatusCode
qui toujours fait référence à un problème de proxy, par exempleProxyAuthenticationRequired
. Malheureusement, la plupart des statuts peut faire référence à une erreur de proxy ou une erreur de serveur. - La collection
webex.Response.Headers
contient des entrées non standard que vous reconnaissez comme étant générée par votre serveur proxy. Par exemple, le proxy Squid retourne le"X-Squid-Error"
d'en-tête, avec son propre ensemble exclusif de statuts. - Le flux
webex.Response.ResponseStream
contient une page HTML ou un message d'erreur de texte brut dans un format que vous reconnaissez comme étant générée par votre serveur proxy. Vous pouvez tester pour voir si elle contient l'URI de votre serveur proxy.
Dans votre bloc catch, assurez-vous que vous n'êtes pas connecté tous les détails de l'objet WebException
, y compris toutes les propriétés mentionnées ci-dessus. Vous pouvez ensuite analyser les données du journal et de développer un test précis pour les erreurs de proxy.
Autres conseils
Je pense que vous pourriez attraper InvalidOperationException puis vérifier le message « proxy ».
Le message disait:
Le nom de proxy ne pouvait pas être résolu: 'localhost'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow