Comment définir le proxy par défaut pour utiliser les informations d’identification par défaut?

Le code suivant fonctionne pour moi:

var webProxy = WebProxy.GetDefaultProxy(); webProxy.UseDefaultCredentials = true; WebRequest.DefaultWebProxy = webProxy; 

WebProxy.GetDefaultProxy() est malheureusement déconseillé. Que dois-je faire d’autre?

(l’utilisation de app.config pour définir les parameters defaultProxy n’est pas autorisée dans mon déploiement)

A partir de .NET 2.0, vous ne devriez pas avoir à le faire. Si vous ne définissez pas explicitement la propriété Proxy sur une requête Web, elle utilise la valeur statique de WebRequest.DefaultWebProxy. Si vous souhaitez modifier le proxy utilisé par tous les WebRequests suivants, vous pouvez définir cette propriété DefaultWebProxy statique.

Le comportement par défaut de WebRequest.DefaultWebProxy consiste à utiliser les mêmes parameters sous-jacents que ceux utilisés par Internet Explorer.

Si vous souhaitez utiliser différents parameters de proxy pour l’utilisateur actuel, vous devez alors coder

 WebRequest webRequest = WebRequest.Create("http://stackoverflow.com/"); webRequest.Proxy = new WebProxy("http://proxyserver:80/",true); 

ou

 WebRequest.DefaultWebProxy = new WebProxy("http://proxyserver:80/",true); 

Vous devez également vous rappeler que le modèle d’object pour les mandataires inclut le concept selon lequel le proxy peut être différent en fonction du nom d’hôte de destination. Cela peut rendre les choses un peu confuses lors du débogage et de la vérification de la propriété de webRequest.Proxy. Appel

webRequest.Proxy.GetProxy(new Uri("http://google.com.au")) pour afficher les détails réels du serveur proxy à utiliser.

Il semble y avoir un débat quant à savoir si vous pouvez définir webRequest.Proxy ou WebRequest.DefaultWebProxy = null pour empêcher l’utilisation de tout proxy. Cela semble fonctionner correctement pour moi, mais vous pouvez le définir sur le new DefaultProxy() sans parameters pour obtenir le comportement requirejs. Une autre chose à vérifier est que si un élément proxy existe dans votre fichier de configuration d’applications, le .NET Framework n’utilisera PAS les parameters de proxy dans Internet Explorer.

L’article de MSDN Magazine intitulé Prendre en charge les utilisateurs avec la configuration automatique dans .NET donne plus de détails sur ce qui se passe sous le capot.

Pour ceux qui, contrairement à Brian Genisio, peuvent définir le contenu du fichier de configuration de leur application: – ne faites rien dans le code. Ajoutez plutôt ceci à votre app.config / web.config.

    

Vraiment, la valeur par défaut pour l’utilisation des identifiants par défaut doit être “true”; J’ai vu ce problème confondre autant de personnes – développeurs, utilisateurs, informaticiens.

Pour plus d’informations, voir ici: – http://sticklebackplastic.com/post/2007/01/26/Poxy-proxies.aspx

MISE À JOUR: J’ai créé ce problème / cette idée pour que Microsoft modifie la valeur par défaut de useDefaultCredentials de false à true afin que tout ce problème disparaisse et que les applications .NET “fonctionnent”; S’il vous plaît, votez pour cela si vous êtes d’accord:
http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2397357-fix-it-so-that-net-apps-can-access-http-thru-auth

 WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials; 

Cela forcera DefaultWebProxy à utiliser les informations d’identification par défaut, un effet similaire à celui UseDefaultCredentials = true via UseDefaultCredentials = true .

Par conséquent, toutes les instances WebRequest nouvellement créées utiliseront le proxy par défaut qui a été configuré pour utiliser les informations d’identification par défaut du proxy.

Vous pouvez utiliser Reflection pour définir le UseDefaultCredentials UseDefaultCredentials -Property de Code sur “true”

 System.Reflection.PropertyInfo pInfo = System.Net.WebRequest.DefaultWebProxy.GetType().GetProperty("WebProxy", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); ((System.Net.WebProxy)pInfo.GetValue(System.Net.WebRequest.DefaultWebProxy, null)).UseDefaultCredentials = true; 

Ce thread est ancien, mais je viens de tomber sur le problème defaultProxy et peut-être que cela aide les autres.

J’ai utilisé le paramètre config comme suggéré par Andrew. Lors du déploiement, mon client a eu une erreur en disant qu’il n’y avait pas suffisamment de droits pour définir la configuration ‘defaultProxy’.

Ne sachant pas pourquoi je n’ai pas le droit de définir cette configuration et ce qu’il faut faire à ce sujet, je viens de la supprimer et cela a encore fonctionné. Donc, il semble que dans VS2013 ce problème est résolu.

Et pendant que nous y sums:

  WebRequest.DefaultWebProxy.Credentials = new NetworkCredential("ProxyUsername", "ProxyPassword"); 

utilise le proxy par défaut avec vos informations d’identification. Si vous voulez forcer à ne pas utiliser de proxy, définissez simplement DefaultWebProxy sur null (bien que je ne sache pas si on le souhaite).

On dirait que dans certaines applications plus récentes, la configuration est différente, comme je l’ai vu sur cette question. Comment s’authentifier sur un proxy lors de l’utilisation de la classe HttpClient?

      

Également documenté sur https://msdn.microsoft.com/en-us/library/dkwyc043.aspx

Dans mon déploiement, je ne peux pas utiliser app.config pour intégrer ce que Andrew Webb a suggéré.
Donc je fais ça:

  IWebProxy proxy = WebRequest.GetSystemWebProxy(); proxy.Credentials = CredentialCache.DefaultCredentials; WebClient wc = new WebClient(); wc.UseDefaultCredentials = true; wc.Proxy = proxy; 

Juste au cas où vous voudriez vérifier mes parameters d’IE:

entrer la description de l'image ici

C’est la nouvelle méthode suggérée.

 WebRequest.GetSystemWebProxy(); 

Est-il nécessaire dans certains systèmes de définir la propriété Proxy:

Net.WebRequest.DefaultWebProxy.Credentials = System.Net.CredentialCache.DefaultCredentials Requête Dim Comme WebRequest = WebRequest.Create (sRemoteFileURL) request.Proxy = Nothing

C’est un bug.