3 votes

Pourquoi le WebProxy BypassProxyOnLocal ne fonctionne-t-il pas pour moi ?

J'essaie de faire en sorte que les appels HTTP que j'effectue depuis C# .NET vers une adresse locale (localhost:3000) utilisent le proxy que j'ai défini (afin de pouvoir passer par fiddler). L'utilisation de l'approche WebProxy ci-dessous fonctionne si je fais pointer l'URL cible vers une adresse non locale, mais j'ai besoin de la faire pointer vers un serveur web local que j'ai (à localhost:3000), et quand je fais cela, la requête ne passe pas par le proxy.

J'ai inclus le paramètre "proxyObject.BypassProxyOnLocal = false". Cela devrait faire fonctionner le système, non ? Avez-vous des suggestions sur la façon de forcer la requête à passer par le WebProxy pour les appels http ciblant une adresse locale ?

    WebProxy proxyObject = new WebProxy("http://localhost:8888/", false);
    proxyObject.Credentials = new NetworkCredential(); 
    proxyObject.BypassProxyOnLocal = false;
    WebRequest.DefaultWebProxy = proxyObject;

    var request = (HttpWebRequest)WebRequest.Create(targetUri);

    // I also included this line as a double check
    request.Proxy = proxyObject;

Les appels ultérieurs ne passent cependant pas par le proxy, comme c'est le cas pour moi :

 var res = (HttpWebResponse)req.GetResponse();

merci

8voto

Lee Francis Points 302

Je contourne ce problème en ajoutant un "point" à localhost. Ainsi, au lieu d'accéder à "localhost", j'essaie d'accéder à "localhost". (remarquez le point à la fin du nom d'hôte)

Le crédit où le crédit est dû : J'ai trouvé cette astuce inhabituelle dans ce fil de discussion http://www.west-wind.com/weblog/posts/2009/Jan/14/Monitoring-HTTP-Output-with-Fiddler-in-NET-HTTP-Clients-and-WCF-Proxies#596591

Cela fonctionne bien !

5voto

aKzenT Points 4490

Voir l'explication sur https://docs.telerik.com/fiddler/observe-traffic/troubleshooting/notraffictolocalhost

Internet Explorer et le .NET Framework sont codés en dur pour ne pas envoyer de requêtes pour Localhost par le biais de proxies, et en tant que proxy, Fiddler ne recevra pas ce trafic.

La solution la plus simple consiste à utiliser le nom de votre machine comme nom d'hôte au lieu de Localhost ou 127.0.0.1. Ainsi, par exemple, au lieu d'aller sur http://localhost:8081/mytestpage.aspx, allez plutôt sur http://machinename:8081/mytestpage.aspx.

0voto

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X