Как установить прокси-сервер по умолчанию для использования учетных данных по умолчанию?
следующий код работает для меня:
var webProxy = WebProxy.GetDefaultProxy();
webProxy.UseDefaultCredentials = true;
WebRequest.DefaultWebProxy = webProxy;
к сожалению, WebProxy.GetDefaultProxy()
устарела. А что мне еще делать?
(С помощью приложения.конфигурация для установки параметров defaultProxy не разрешена в моем развертывании)
9 ответов:
из .NET 2.0 вам не нужно этого делать. Если вы явно не задаете свойство Proxy для веб-запроса, оно использует значение статического WebRequest.DefaultWebProxy. Если вы хотите изменить прокси, используемый всеми последующими веб-запросами, вы можете установить это статическое свойство DefaultWebProxy.
поведение по умолчанию WebRequest.DefaultWebProxy должен использовать те же основные параметры, что и Internet Explorer.
если вы хотите использовать другие настройки прокси-сервера для текущего пользователя, то вам нужно будет код
WebRequest webRequest = WebRequest.Create("http://stackoverflow.com/"); webRequest.Proxy = new WebProxy("http://proxyserver:80/",true);
или
WebRequest.DefaultWebProxy = new WebProxy("http://proxyserver:80/",true);
вы также должны помнить, что объектная модель для прокси-серверов включает концепцию, что прокси-сервер может отличаться в зависимости от имени хоста назначения. Это может сделать вещи немного запутанным при отладке и проверке свойства webRequest.Полномочие. Звоните
webRequest.Proxy.GetProxy(new Uri("http://google.com.au"))
чтобы увидеть фактические данные прокси-сервера, который будет используемый.там, кажется, некоторые дебаты о том, можно ли установить
webRequest.Proxy
илиWebRequest.DefaultWebProxy = null
чтобы предотвратить использование любого прокси. Это, кажется, работает нормально для меня, но вы можете установить его вnew DefaultProxy()
без параметров, чтобы получить требуемое поведение. Еще одна вещь, чтобы проверить, что если прокси-элементом существует в вашем файле конфигурации приложений, .NET Framework будет не используйте параметры прокси-сервера в Internet Explorer.статья журнала MSDN снять нагрузку с пользователей с автоматической настройкой в .NET дает дополнительную информацию о том, что происходит под капотом.
для тех, кто, в отличие от Брайана Genisio, are возможность установить содержимое конфигурационного файла своего приложения: - ничего не делайте в коде. Вместо этого добавьте это в свое приложение.config / web.конфиг.
<system.net> <defaultProxy useDefaultCredentials="true" /> </system.net>
действительно и действительно значение по умолчанию для использования учетных данных по умолчанию должно быть" true"; я видел, что эта проблема смущает так много людей - разработчиков, пользователей, ИТ-специалистов.
подробнее здесь:- http://sticklebackplastic.com/post/2007/01/26/Poxy-proxies.aspx
UPDATE: я создал эту проблему / идею для Microsoft, чтобы изменить значение по умолчанию useDefaultCredentials с false на true, чтобы вся эта проблема исчезла и приложения .NET "просто работали"; пожалуйста, проголосуйте, если вы agree:
http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2397357-fix-it-so-that-net-apps-can-access-http-thru-auth
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
это
DefaultWebProxy
использовать учетные данные по умолчанию, аналогичный эффект, как сделал черезUseDefaultCredentials = true
.отсюда все вновь созданный
WebRequest
экземпляры будут использовать прокси по умолчанию, который был настроен для использования учетных данных прокси по умолчанию.
Вы можете использовать отражение, чтобы установить
UseDefaultCredentials
- свойство из кода в "true"System.Reflection.PropertyInfo pInfo = System.Net.WebRequest.DefaultWebProxy.GetType().GetProperty("WebProxy", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); ((System.Net.WebProxy)pInfo.GetValue(System.Net.WebRequest.DefaultWebProxy, null)).UseDefaultCredentials = true;
этот поток старый, но я только недавно наткнулся на проблему defaultProxy и, возможно, это помогает другим.
я использовал настройку конфигурации, как предложил Андрей. При его развертывании мой клиент получил сообщение об ошибке, что не было достаточных прав для установки конфигурации "defaultProxy".
Не зная, почему я не имею права устанавливать эту конфигурацию и что с этим делать, я просто удалил ее, и она все еще работала. Так что кажется, что в VS2013 этот вопрос зафиксированный.
и пока мы здесь:
WebRequest.DefaultWebProxy.Credentials = new NetworkCredential("ProxyUsername", "ProxyPassword");
использует прокси-сервера по умолчанию с вашими учетными данными. Если вы хотите заставить не использовать прокси-сервер, просто установите DefaultWebProxy в null (хотя я не знаю, нужно ли это).
похоже, что в некоторых новых приложениях конфигурация отличается, как я видел на этот вопрос Как пройти аутентификацию на прокси-сервере при использовании класса HttpClient?
<system.net> <defaultProxy enabled="true" useDefaultCredentials="true"> <proxy usesystemdefault="True" /> </defaultProxy> </system.net>
также задокументировано на https://msdn.microsoft.com/en-us/library/dkwyc043.aspx
в моем развертывании я не могу использовать приложение.config ни для того, чтобы встроить то, что предложил Эндрю Уэбб.
Так что я делаю это:IWebProxy proxy = WebRequest.GetSystemWebProxy(); proxy.Credentials = CredentialCache.DefaultCredentials; WebClient wc = new WebClient(); wc.UseDefaultCredentials = true; wc.Proxy = proxy;
на всякий случай вы хотите проверить мои настройки IE: