Получить URI из веб-прокси по умолчанию - PullRequest
8 голосов
/ 23 ноября 2010

Я пишу программу, которая должна работать без прокси и с прокси с аутентификацией - автоматически!Это должно вызвать службу WCF.В этом примере экземпляр называется client.Я также использую самописный класс (proxyHelper), который запрашивает учетные данные.

 BasicHttpBinding connection = client.Endpoint.Binding as BasicHttpBinding;<br/>
 connection.ProxyAddress = _???_<br/>
 connection.UseDefaultWebProxy = false;<br/>
 connection.BypassProxyOnLocal = false;<br/>
 connection.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;<br/>
 client.ClientCredentials.UserName.UserName = proxyHelper.Username;
 client.ClientCredentials.UserName.Password = proxyHelper.Password;

У меня проблема с получением ProxyAddress.Если я использую HttpWebRequest.GetSystemWebProxy() для получения фактического определенного прокси, то в режиме отладки я вижу правильный адрес прокси, но это не публичное свойство.Установка UseDefaultWebProxy в значение true не работает, и если я добавлю адрес прокси в жестком коде и установите для UseDefaultWebProxy значение false, он будет работать нормально.Итак ... как я могу получить адрес веб-прокси по умолчанию?

1 Ответ

16 голосов
/ 23 ноября 2010

У прокси есть метод с именем GetProxy , который можно использовать для получения Uri прокси.

Вот фрагмент описания из MSDN:

Метод GetProxy возвращает URI, который экземпляр WebRequest использует для доступа к интернет-ресурсу.

GetProxy сравнивает назначениес содержимым BypassList, используя метод IsBypassed.Если IsBypassed возвращает true, GetProxy возвращает пункт назначения, а экземпляр WebRequest не использует прокси-сервер.

Если пункт назначения не находится в BypassList, экземпляр WebRequest использует прокси-сервер, и возвращается свойство Address.

Вы можете использовать следующий код для получения сведений о прокси.Обратите внимание, что Uri, который вы передаете методу GetProxy, важен, так как он вернет вам учетные данные прокси, только если прокси не обойден для указанного Uri.

var proxy = System.Net.HttpWebRequest.GetSystemWebProxy();

//gets the proxy uri, will only work if the request needs to go via the proxy 
//(i.e. the requested url isn't in the bypass list, etc)
Uri proxyUri = proxy.GetProxy(new Uri("http://www.google.com"));

proxyUri.Host.Dump();        // 10.1.100.112
proxyUri.AbsoluteUri.Dump(); // http://10.1.100.112:8080/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...