Je travaille dans un bureau où toutes les connexions doivent être établies via un proxy http spécifique. J'ai besoin d'écrire une application simple pour interroger certaines valeurs d'un serveur Web - c'est facile s'il n'y avait 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?
Ceci est facilement réalisé par programme, dans votre code ou de manière déclarative dans le fichier web.config ou dans le fichier app.config.
Vous pouvez créer par programme 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 affectez essentiellement l'objet WebProxy
à la propriété request
de l'objet proxy
. Ce request
utilisera ensuite le 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>
dans votre web.config ou app.config. Ceci définit un proxy par défaut que toutes les requêtes http utiliseront. Selon ce que vous devez réaliser, vous pouvez avoir besoin de certains attributs supplémentaires de l’élément defaultProxy / proxy , veuillez donc vous reporter à la documentation correspondante.
Si vous utilisez WebClient
, il possède une propriété proxy que vous pouvez utiliser.
Comme d'autres l'ont mentionné, il existe plusieurs façons d'automatiser la détection/l'utilisation des paramètres de proxy
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 configurer directement les paramètres du proxy (config ou code) et votre application les utilisera ensuite.
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();
Essayez ce code. Appelez-le avant de faire des requêtes http. Le code utilisera le proxy de vos paramètres Internet Explorer - une chose cependant, j'utilise proxy.Credentials = ....
parce que mon serveur proxy est un serveur d'accélération Internet authentifié par NTLM. Donnez-lui un as.
static void setProxy()
{
WebProxy proxy = (WebProxy)WebProxy.GetDefaultProxy();
if(proxy.Address != null)
{
proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
WebRequest.DefaultWebProxy = new System.Net.WebProxy(proxy.Address, proxy.BypassProxyOnLocal, proxy.BypassList, proxy.Credentials);
}
}
Si vous souhaitez 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 article de MSDN sur System.Net
Ce one-liner fonctionne pour moi:
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
CredentialCache.DefaultNetWorkCredentials
représente les paramètres de proxy définis dans Internet Explorer.
WebRequest.DefaultWebProxy.Credentials
est utilisé pour toutes les connexions Internet dans l’application.
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;
Ce code a fonctionné pour moi:
WebClient wc = new WebClient();
wc.Proxy.Credentials = CredentialCache.DefaultCredentials;
La détection automatique du proxy est un processus par lequel un serveur proxy Web est identifié par le système et utilisé pour envoyer des demandes au nom du client. Cette fonctionnalité est également connue sous le nom de découverte automatique du proxy Web (WPAD). Lorsque la détection automatique du proxy est activée, le système tente de localiser un script de configuration du proxy chargé de renvoyer l'ensemble des mandataires pouvant être utilisés pour la demande.
Je vais utiliser un exemple pour ajouter aux réponses ci-dessus.
J'ai rencontré des problèmes de proxy en essayant d'installer des packages via Web Platform Installer
Cela aussi utilise un fichier de configuration qui est WebPlatformInstaller.exe.config
J'ai essayé les modifications suggérées dans this IIS forum) qui est
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<defaultProxy enabled="True" useDefaultCredentials="True"/>
</system.net>
</configuration>
et
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<defaultProxy>
<proxy
proxyaddress="http://yourproxy.company.com:80"
usesystemdefault="True"
autoDetect="False" />
</defaultProxy>
</system.net>
</configuration>
Aucune de ces solutions n'a fonctionné.
Ce qui a fonctionné pour moi était ceci -
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="false">
<module type="WebPI.Net.AuthenticatedProxy, WebPI.Net, Version=1.0.0.0, Culture=neutral, PublicKeyToken=79a8d77199cbf3bc" />
</defaultProxy>
</system.net>
Le module devait être enregistré auprès de Web Platform Installer pour pouvoir être utilisé.
var getHtmlWeb = new HtmlWeb() { AutoDetectEncoding = false, OverrideEncoding = Encoding.GetEncoding("iso-8859-2") };
WebProxy myproxy = new WebProxy("127.0.0.1:8888", false);
NetworkCredential cred = (NetworkCredential)CredentialCache.DefaultCredentials;
var document = getHtmlWeb.Load("URL", "GET", myproxy, cred);