Obtenir l’URI du proxy Web par défaut

J’écris un programme qui devrait fonctionner sans proxy et avec proxy avec authentification – automatiquement! Il devrait appeler un service WCF. Dans cet exemple, l’instance s’appelle client . J’utilise également une classe auto-écrite ( proxyHelper ) qui demande les informations d’identification.

  BasicHttpBinding connection = client.Endpoint.Binding as BasicHttpBinding;
connection.ProxyAddress = _???_
connection.UseDefaultWebProxy = false;
connection.BypassProxyOnLocal = false;
connection.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;
client.ClientCredentials.UserName.UserName = proxyHelper.Username; client.ClientCredentials.UserName.Password = proxyHelper.Password;

Je rencontre un problème pour obtenir l’adresse proxy. Si j’utilise HttpWebRequest.GetSystemWebProxy() pour obtenir le proxy défini réel, l’adresse de proxy correcte s’affiche en mode débogage, mais c’est une propriété non publique. La définition de UseDefaultWebProxy sur true ne fonctionne pas. Si j’ajoute l’adresse de proxy codée en dur et que j’utilise false pour UseDefaultWebProxy, cela fonctionne correctement. Alors … comment puis-je obtenir l’adresse du proxy Web par défaut?

Le proxy a une méthode appelée GetProxy qui peut être utilisée pour obtenir l’URI du proxy.

Voici un extrait de la description de MSDN:

La méthode GetProxy renvoie l’URI que l’instance WebRequest utilise pour accéder à la ressource Internet.

GetProxy compare la destination au contenu de BypassList, à l’aide de la méthode IsBypassed. Si IsBypassed renvoie true, GetProxy renvoie la destination et l’instance WebRequest n’utilise pas le serveur proxy.

Si la destination ne figure pas dans BypassList, l’instance WebRequest utilise le serveur proxy et la propriété Address est renvoyée.

Vous pouvez utiliser le code suivant pour obtenir les détails du proxy. Notez que l’URI que vous transmettez à la méthode GetProxy est important, car il ne vous renverra les informations d’identification du proxy que si le proxy n’est pas ignoré pour l’URI spécifié.

 var proxy = System.Net.HttpWebRequest.GetSystemWebProxy(); //gets the proxy uri, will only work if the request needs to go via the proxy //(ie the requested url isn't in the bypass list, etc) Uri proxyUri = proxy.GetProxy(new Uri("http://www.google.com")); proxyUri.Host.Dump(); // 10.1.100.112 proxyUri.AbsoluteUri.Dump(); // http://10.1.100.112:8080/