C# Подключение Через Прокси
Я работаю в офисе, который требует, чтобы все соединения были сделаны через определенный прокси http. Мне нужно написать простое приложение для некоторых значений запроса с веб-сервера - это легко, если нет доверенности. Как я могу сделать приложение c# прокси? Как я могу сделать какое-либо соединение через прокси?
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). Если включено автоматическое обнаружение прокси-сервера, система пытается найти сценарий конфигурации прокси-сервера, который отвечает за возврат набора прокси-серверов, которые могут использоваться для запрос.
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