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
}
Était-ce utile?

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 exemple ProxyAuthenticationRequired. 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
scroll top