C# Подключение Через Прокси



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

961   10  

10 ответов:

это легко достигается либо программно, в коде, либо декларативно, либо в интернете.конфигурация или приложение.конфиг.

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

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 собственность. Это использовать proxy вы определяете.

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

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

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

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

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

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

попробуйте этот код. Вызовите его перед выполнением любых http-запросов. Код будет использовать прокси из Ваших настроек Internet Explorer-одна вещь, хотя, я использую proxy.Credentials = .... потому что мой прокси-сервер является сервером ускорения интернета с проверкой подлинности 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);
    }
}

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

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

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

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

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

WebClient web = new WebClient();
if (web.Proxy != null)
    web.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;

Это один-лайнер работает на меня:

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;

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

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

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

WebClient wc = new WebClient();
wc.Proxy.Credentials = CredentialCache.DefaultCredentials;

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

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

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

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

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

Это тоже использует конфигурационный файл, который является WebPlatformInstaller.исполняемый.конфигурации

я попробовал правки предложить в этот форум 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>

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

Comments

    Ничего не найдено.