Я работаю в офисе, который требует, чтобы все соединения были сделаны через определенного прокси HTTP. Я должен записать простое приложение для запросов некоторых значений от веб-сервера - легко, если не было никакого прокси. Как я могу подать заявку C#, прокси осведомленную? Как я могу сделать какой-либо вид соединения через прокси?
Это легко достигается либо программно, в вашем коде, либо декларативно либо в 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 , поэтому обратитесь к документации по ним.
] Если вы используете 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();
Если вы хотите, чтобы приложение использовало системный прокси по умолчанию, добавьте его в свой Application.exe.config (где application.exe - это имя вашего приложения):
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="true" bypassonlocal="true" />
</defaultProxy>
</system.net>
Подробнее см. можно найти в статье MSDN о System.Net
Автоматическое определение прокси-сервера - это процесс, при котором веб-прокси-сервер идентифицируется система и используется для отправки запросов от имени клиента. Эта функция также известна как Автообнаружение веб-прокси (WPAD). Когда включено автоматическое определение прокси, система пытается найти сценарий конфигурации прокси, который отвечает за возврат набора прокси, который может использоваться для запроса.
Этот код работал для я:
WebClient wc = new WebClient();
wc.Proxy.Credentials = CredentialCache.DefaultCredentials;