105 votes

Connexion C # via un proxy

Je travaille dans un bureau où toutes les connexions doivent être établies via un proxy http spécifique. Je dois écrire une application simple pour interroger certaines valeurs d'un serveur Web. C'est facile s'il n'y a pas de proxy. Comment puis-je rendre l'application C # compatible avec le proxy? Comment puis-je établir un type de connexion via un proxy?

122voto

CraigTP Points 18514

Ceci est facilement réalisé par programme, dans votre code, ou de façon déclarative dans le web.config ou app.config.

Vous pouvez créer par programmation un proxy comme suit:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("[ultimate destination of your request]");
WebProxy myproxy = new WebProxy("[your proxy address]", [your proxy port number]);
myproxy.BypassProxyOnLocal = false;
request.Proxy = myproxy;
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse) request.GetResponse();

Vous êtes essentiellement de l'affectation de la WebProxy objet à l' request de l'objet proxy de la propriété. Cette request utilisera alors l' proxy que vous définissez.

Pour obtenir la même chose de manière déclarative, vous pouvez effectuer les opérations suivantes:

<system.net>
  <defaultProxy>
    <proxy
      proxyaddress="http://[your proxy address and port number]"
      bypassonlocal="false"
    />
  </defaultProxy>
</system.net>

au sein de votre site web.config ou app.config. Cela définit un proxy par défaut que toutes les requêtes http à utiliser. Selon exactement ce que vous devez atteindre, vous peut ou ne peut pas exiger certains des attributs supplémentaires de la defaultProxy / proxy élément, donc veuillez vous référer à la documentation de ceux-ci.

23voto

Oded Points 271275

Si vous utilisez WebClient, il a un Proxy de la propriété que vous pouvez utiliser.

Comme d'autres l'ont mentionné, il existe plusieurs façons d'automatiser la configuration du proxy détection/d'utilisation

Web.Config:

<system.net>
   <defaultProxy enabled="true" useDefaultCredentials="true">
     <proxy usesystemdefault="true" bypassonlocal="true" />
   </defaultProxy>
</system.net>

Utilisation de la classe WebProxy comme décrit dans cet article.


Vous pouvez également cofigure les paramètres de proxy directement (config ou code) de votre application puis de l'utiliser.

Web.Config:

<system.net>
  <defaultProxy>
    <proxy
      proxyaddress="http://[proxy address]:[proxy port]"
      bypassonlocal="false"
    />
  </defaultProxy>
</system.net>

Code:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("url");
WebProxy myproxy = new WebProxy("[proxy address]:[proxy port]", false);
request.Proxy = myproxy;
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse) request.GetResponse();

7voto

Robert Christie Points 7323

Si vous voulez que l'application utilise le proxy par défaut du système, ajoutez ceci à votre application.exe.config (où application.exe est le nom de votre application):

 <system.net>
   <defaultProxy enabled="true" useDefaultCredentials="true">
   <proxy usesystemdefault="true" bypassonlocal="true" />
   </defaultProxy>
</system.net>
 

Plus de détails peuvent être trouvés dans l' article de MSDN sur System.Net

4voto

JCH2k Points 170

Le code de Foole fonctionnait parfaitement pour moi, mais dans .NET 4.0, n'oubliez pas de vérifier si le proxy est NULL, ce qui signifie qu'aucun proxy n'est configuré (en dehors de l'environnement de l'entreprise).

Alors, voici le code qui a résolu mon problème avec notre proxy d'entreprise

 WebClient web = new WebClient();
if (web.Proxy != null)
    web.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
 

3voto

Foole Points 2341

Ce code a fonctionné pour moi:

 WebClient wc = new WebClient();
wc.Proxy.Credentials = CredentialCache.DefaultCredentials;
 

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