Подтвердить что ты не робот

Настройки автоматического определения прокси-сервера С#

С# 2008 SP1

Я использую код, чтобы определить, был ли прокси установлен в "Свойства обозревателя". Если есть прокси-сервер, то я установлю его в своем веб-клиенте.

Поэтому я просто проверяю, существует ли адрес прокси. Если этого не происходит, то в веб-клиенте нет прокси-сервера.

Это правильный способ сделать это:

Большое спасибо за любой совет,

WebProxy proxy = WebProxy.GetDefaultProxy();

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

====== Редактирование кода ======

[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;
}
4b9b3361

Ответ 1

Похоже, что WebRequest.DefaultWebProxy является официальной заменой для WebProxy.GetDefaultProxy.

Вы можете оставить это в своем исходном коде только с небольшой модификацией. Что-то вроде:

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

Ответ 2

WebClient и т.д. используют настройки WinHTTP (не настройки IE), поэтому проще всего настроить WinHTTP! В XP и т.д. Вы можете использовать:

proxycfg -u

чтобы импортировать текущие настройки IE в хранилище WinHTTP. После этого WebClient и т.д. Должны иметь возможность использовать те же настройки без проблем. В Vista и Windows 7 это теперь можно найти по адресу:

netsh winhttp import proxy ie

Вам нужно запустить это как администратор.

Ответ 3

Во-первых, GetDefaultProxy отмечен как устаревший, так что у вас нет гарантии, что он будет рядом даже в ближайшем будущем. Во-вторых, Address может быть нулевым, поэтому код, который вы указали, подвержен исключению NullReferenceException:

Ответ 4

Попробуйте следующее:

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);
}

Это приведет к настройке прокси-сервера по умолчанию и учетным данным перед вызовом вашего веб-сервиса, например.

Ответ 5

Проверьте класс System.Net.Configuration.ProxyElement. Возможно, у вас есть информация, которую вы ищете.

То, что вы описываете, работает, вы также можете посмотреть в реестре.

Здесь powershell script я написал, чтобы проверить прокси:

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

Ответ 6

Установка моего запроса-прокси на WebRequest.GetSystemWebProxy() решила проблему.

WebProxy.GetDefaultProxy() является фактическим, но теперь он устарел.

Ответ 7

<system.net>
<defaultProxy enabled="false" useDefaultCredentials="false">
  <proxy/>
  <bypasslist/>
  <module/>
</defaultProxy>

Используйте этот фрагмент в файле application.config.

Ответ 8

Это работает для меня

        var proxy = WebRequest.GetSystemWebProxy();
        Uri testUrl = new Uri("http://proxy.example.com");
        var proxyUrl = proxy.GetProxy(testUrl);
        if (proxyUrl != testUrl)
            //Use your proxy here
        else
            //We are not using a proxy