C#, соединяющийся через прокси

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

90
задан KalEl 21 December 2009 в 09:03
поделиться

5 ответов

Это легко достигается либо программно, в вашем коде, либо декларативно либо в 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 . Этот запрос затем будет использовать прокси , который вы определяете.

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

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

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

]
102
ответ дан 24 November 2019 в 07:05
поделиться

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

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

Web.Config:

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

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


Вы также можете напрямую сконфигурировать настройки прокси (конфигурация или код) и ваше приложение будет их использовать.

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();
22
ответ дан 24 November 2019 в 07:05
поделиться

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

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

Подробнее см. можно найти в статье MSDN о System.Net

6
ответ дан 24 November 2019 в 07:05
поделиться

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

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

0
ответ дан 24 November 2019 в 07:05
поделиться

Этот код работал для я:

WebClient wc = new WebClient();
wc.Proxy.Credentials = CredentialCache.DefaultCredentials;
3
ответ дан 24 November 2019 в 07:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: