web-dev-qa-db-fra.com

C # Détection automatique Paramètres de proxy

C # 2008 SP1

J'utilise le code pour détecter si un proxy a été défini sous "Options Internet". S'il y a un proxy, je vais mettre cela dans mon webclient.

Je ne vérifie donc que si l'adresse du proxy existe. S'il n'y a pas, il n'y a pas de proxy à régler dans le webclient.

Est-ce la bonne façon de faire cela:

Merci beaucoup pour tout conseil,

WebProxy proxy = WebProxy.GetDefaultProxy();

if (proxy.Address.ToString() != string.Empty)
{
    Console.WriteLine("Proxy URL: " + proxy.Address.ToString());
    wc.Proxy = proxy;
}

====== code edit ======

[DllImport("wininet.dll", CharSet = CharSet.Auto)]
private extern static bool InternetGetConnectedState(ref InternetConnectionState_e lpdwFlags, int dwReserved);

[Flags]
enum InternetConnectionState_e : int
{
    INTERNET_CONNECTION_MODEM = 0x1,
    INTERNET_CONNECTION_LAN = 0x2,
    INTERNET_CONNECTION_PROXY = 0x4,
    INTERNET_RAS_INSTALLED = 0x10,
    INTERNET_CONNECTION_OFFLINE = 0x20,
    INTERNET_CONNECTION_CONFIGURED = 0x40
}     

// Return true or false if connecting through a proxy server
public bool connectingThroughProxy()
{
    InternetConnectionState_e flags = 0;
    InternetGetConnectedState(ref flags, 0);
    bool hasProxy = false;

    if ((flags & InternetConnectionState_e.INTERNET_CONNECTION_PROXY) != 0)
    {
        hasProxy = true;
    }
    else
    {
        hasProxy = false;
    }

    return hasProxy;
}
23
ant2009

Il semble que webrequest.defaultwebproxy est le remplacement officiel pour webProxy.getDefaultProxy.

Vous devriez être capable de laisser tomber cela dans votre code d'origine avec seulement une petite modification. Quelque chose comme:

WebProxy proxy = (WebProxy) WebRequest.DefaultWebProxy;
if (proxy.Address.AbsoluteUri != string.Empty)
{
    Console.WriteLine("Proxy URL: " + proxy.Address.AbsoluteUri);
    wc.Proxy = proxy;
}
27
Nathan Stohlmann

WebClient etc utilise les paramètres WinHTTP (pas les paramètres IE), donc la chose la plus facile à faire est de configurer WinHTTP! Sur XP, etc., vous pouvez utiliser:

proxycfg -u

pour importer les paramètres actuels IE dans le magasin WinHTTP. Après cela, WebClient etc. devrait pouvoir utiliser les mêmes paramètres sans problème. Sur Vista et Windows 7, on trouve maintenant sous:

netsh winhttp import proxy ie

Vous devez exécuter cela comme administrateur.

5
Marc Gravell

Premièrement, getDefaultProxy est marqué comme obsolète de sorte que vous n'avez aucune garantie que ce sera dans l'avenir immédiat. Deuxièmement, adresse peut être null afin que le code que vous avez donné des risques une nullreferenceException:

4

Essayez ce qui suit:

public string GetMeMyInfo(string searchCriteria)
{
    // Instatiate the web service and declare the necessary variables
    WsService.WsServiceBus oWsGetInfo = new WsService.WsServiceBus();
    // Configure the Web Service Proxy
    oWsGetInfo.Proxy = System.Net.WebProxy.GetDefaultProxy();
    oWsGetInfo.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
    // Invoke the web service
    return oWsGetInfo.GetInfo4Me(searchCriteria);
}

Cela obtiendra le paramètre de proxy et les informations d'identification par défaut avant d'invoquer votre service Web par exemple.

3
EdsonF

Définition de ma demande proxy à WebRequest.GetSystemWebProxy() a résolu le problème.

WebProxy.GetDefaultProxy() est la voie réelle mais elle est maintenant obsolète.

2
iCoder

Découvrez la classe System.net.Configuration.ProxyElement. Cela peut avoir des informations que vous recherchez.

Ce que vous décrivez les œuvres, vous pouvez également regarder dans le registre.

Voici un script PowerShell que j'ai écrit pour vérifier le proxy:

function get-proxy
{
    $path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
    $reg = get-itemproperty $path
    return $reg
}
2
John Weldon