C # Подключение через прокси - PullRequest
86 голосов
/ 21 декабря 2009

Я работаю в офисе, который требует, чтобы все соединения выполнялись через определенный http-прокси. Мне нужно написать простое приложение для запроса некоторых значений с веб-сервера - это легко, если бы не было прокси. Как я могу настроить прокси приложения C #? Как я могу установить соединение через прокси-сервер?

Ответы [ 10 ]

98 голосов
/ 21 декабря 2009

Это легко достигается либо программно, в вашем коде, либо декларативно в файле web.config или app.config.

Вы можете программно создать прокси, например:

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

Вы в основном назначаете объект WebProxy свойству request объекта proxy. Затем request будет использовать proxy, который вы определили.

Чтобы декларативно добиться того же, вы можете сделать следующее:

<system.net>
  <defaultProxy>
    <proxy
      proxyaddress="http://[your proxy address and port number]"
      bypassonlocal="false"
    />
  </defaultProxy>
</system.net>

в вашем файле web.config или app.config. Это устанавливает прокси по умолчанию, который будут использовать все запросы http. В зависимости от того, чего именно вам нужно достичь, вам могут потребоваться или не потребоваться некоторые дополнительные атрибуты элемента defaultProxy / proxy , поэтому обратитесь к документации по ним.

22 голосов
/ 21 декабря 2009

Если вы используете WebClient, он имеет свойство Proxy , которое вы можете использовать.

Как уже упоминалось, есть несколько способов автоматизировать обнаружение / использование настроек прокси

Web.Config:

<system.net>
   <defaultProxy enabled="true" useDefaultCredentials="true">
     <proxy usesystemdefault="true" bypassonlocal="true" />
   </defaultProxy>
</system.net>

Использование класса WebProxy, как описано в этой статье .


Вы также можете настроить параметры прокси-сервера напрямую (config или code), и ваше приложение будет использовать их.

Web.Config:

<system.net>
  <defaultProxy>
    <proxy
      proxyaddress="http://[proxy address]:[proxy port]"
      bypassonlocal="false"
    />
  </defaultProxy>
</system.net>

Код:

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();
6 голосов
/ 14 ноября 2015

Этот однострочный у меня работает:

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;

CredentialCache.DefaultNetWorkCredentials - настройки прокси, установленные в Internet Explorer.

WebRequest.DefaultWebProxy.Credentials используется для всех подключений к Интернету в приложении.

6 голосов
/ 11 мая 2011

Попробуйте этот код. Позвоните, прежде чем делать какие-либо запросы http. Код будет использовать прокси из ваших настроек Internet Explorer - хотя я использую proxy.Credentials = ...., потому что мой прокси-сервер является сервером Internet Acceleration NTLM с проверкой подлинности. Дай ему свист.

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);
    }
}
5 голосов
/ 21 декабря 2009

Если вы хотите, чтобы приложение использовало прокси-сервер системы по умолчанию, добавьте его в файл Application.exe.config (где application.exe - имя вашего приложения):

<system.net>
   <defaultProxy enabled="true" useDefaultCredentials="true">
   <proxy usesystemdefault="true" bypassonlocal="true" />
   </defaultProxy>
</system.net>

Более подробную информацию можно найти в статье MSDN на System.Net

.
4 голосов
/ 23 ноября 2012

Код Foole отлично сработал для меня, но в .NET 4.0 не забудьте проверить, что Proxy имеет значение NULL, что означает, что прокси-сервер не настроен (вне корпоративной среды)

Итак, вот код, который решил мою проблему с нашим корпоративным прокси

WebClient web = new WebClient();
if (web.Proxy != null)
    web.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
3 голосов
/ 21 декабря 2009

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

WebClient wc = new WebClient();
wc.Proxy.Credentials = CredentialCache.DefaultCredentials;
0 голосов
/ 10 сентября 2015

Я собираюсь использовать пример, чтобы добавить к ответам выше.

Я столкнулся с проблемами с прокси при попытке установить пакеты через Установщик веб-платформы

При этом также используется файл конфигурации WebPlatformInstaller.exe.config

Я попытался предложить изменения в этом форуме IIS , который

<?xml version="1.0" encoding="utf-8" ?>
<configuration>  
  <system.net>    
     <defaultProxy enabled="True" useDefaultCredentials="True"/>      
   </system.net>
</configuration>

и

<?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>

Ничего из этого не сработало.

Что сработало для меня, так это -

<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>

Чтобы использовать его, модуль должен быть зарегистрирован в установщике веб-платформы.

0 голосов
/ 16 мая 2015
            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);
0 голосов
/ 21 декабря 2009

Автоматическое определение прокси-сервера - это процесс, с помощью которого веб-прокси-сервер идентифицируется Система и используется для отправки запросов от имени клиента. Эта функция также известна как Автоматическое обнаружение веб-прокси (WPAD). Когда автоматическое определение прокси включено, система пытается найти сценарий конфигурации прокси, который отвечает за возврат набора прокси, которые можно использовать для запроса.

http://msdn.microsoft.com/en-us/library/fze2ytx2.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...