Question

Nous avons une opération d'arrière-plan (service fenêtre) que nous voulons utiliser via un serveur proxy.

En fait, nous faisons cela:

public WebClient GetWebClient(){
   var webClient = new WebClient();
   webClient.proxy = new WebProxy(Configuration.ProxyHost, Configuration.ProxyPort);

   // add a bunch of headers to the WebClient (sessionids, etc.)

   return webClient;
}

Le proxy est un que nous nous avons configuré à l'aide FreeProxy .

J'ai activé l'enregistrement et sur la machine que je teste avec, et peut confirmer que les demandes sont faites au proxy lorsque vous l'utilisez dans Firefox.

Aucune authentification est requise pour le serveur proxy, à l'exception que l'adresse IP doit être au sein de notre bureau (qui de la preuve Firefox, je suppose que le problème est pas).

Cependant, dans notre processus d'arrière-plan, je ne semble pas être en utilisant le proxy lorsque j'utilise le webclient:

using(var wc = GetWebClient())
using(var s = wc.OpenRead("someurl"))
using(var sr = new StreamReader(s)){
    return sr.ReadToEnd();
}

Je reçois aucune erreur du proxy, il semble cependant que nous allons juste en passer, même si la procuration a été explicitement définie.

L'information semble revenir bien, mais pas par notre proxy.

Y at-il quelque chose que je suis absent lors de l'utilisation d'un proxy avec un WebClient?

modifier: plus de détails. Si nous désactiver le service proxy sur le serveur, nous obtenons une exception que nous ne pouvons pas se connecter. Il semble donc que le webclient tente d'atteindre le proxy, mais que le trafic ne circule pas en fait par le proxy.

Inner Exception: SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
Était-ce utile?

La solution

It turns out that FreeProxy wasn't accepting HTTPS traffic.

I guess the proxy must return the types of traffic it can route, and if it cannot, the webclient does nothing.

Switched to using the Burp suite as our proxy since it can accept HTTPS.

http://portswigger.net/burp/

Autres conseils

You either have to configure windows for using the proxy by default, or set the proxy manually in your code, see: http://msdn.microsoft.com/en-us/library/system.net.webclient.proxy(v=VS.100).aspx

You are using the WebClient class correctly as far as I can tell. I am able to see the following request...

using(var client = new WebClient())
{
    client.Proxy = new WebProxy("localhost", 8888);
    Console.WriteLine(client.DownloadString("http://www.google.com"));
}

in Fiddler running on my local box. Now if I shut Fiddler down, I get the WebException:

Unable to connect to the remote server

With an inner SocketException of:

No connection could be made because the target machine actively refused it 127.0.0.1:8888

So, with that said, my guess is that your proxy is working as intened but it is just not logging the outgoing HTTP request.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top