Как установить прокси-сервер по умолчанию для использования учетных данных по умолчанию?

Следующий код работает для меня:

var webProxy = WebProxy.GetDefaultProxy();
webProxy.UseDefaultCredentials = true;
WebRequest.DefaultWebProxy = webProxy;

К сожалению, WebProxy.GetDefaultProxy() устарел. Что еще я должен делать?

(с помощью app.config для установки параметров defaultProxy в моем развертывании не разрешено)

Ответ 1

Из .NET 2.0 вам не нужно это делать. Если вы явно не устанавливаете свойство Proxy в веб-запросе, оно использует значение статического WebRequest.DefaultWebProxy. Если вы хотите изменить прокси-сервер, используемый всеми последующими WebRequests, вы можете установить это статическое свойство 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.Proxy. Вызов

webRequest.Proxy.GetProxy(new Uri("http://google.com.au")), чтобы увидеть фактические данные прокси-сервера, который будет использоваться.

Кажется, есть некоторые споры о том, можете ли вы установить webRequest.Proxy или WebRequest.DefaultWebProxy = null, чтобы предотвратить использование любого прокси. Кажется, что это работает нормально для меня, но вы можете установить его на new DefaultProxy() без параметров, чтобы получить требуемое поведение. Еще одна вещь, чтобы проверить, что если Возьмите пользователей с автоматической загрузкой в ​​.NET, дайте более подробную информацию о том, что происходит под капотом.

Ответ 2

Для тех, кто, в отличие от Брайана Генисио, может установить содержимое своего конфигурационного файла приложения: - ничего не делайте в коде. Вместо этого добавьте это в свой app.config/web.config.

<system.net>
  <defaultProxy useDefaultCredentials="true" />
</system.net>

Действительно, по умолчанию для использования учетных данных по умолчанию должно быть "true"; Я видел, что эта проблема путала так много людей - разработчиков, пользователей, ИТ-ребята.

Подробнее см. здесь: - http://sticklebackplastic.com/post/2007/01/26/Poxy-proxies.aspx

UPDATE: я создал эту проблему/идею для Microsoft, чтобы изменить значение defaultDefaultCredentials с false на true, чтобы эта целая проблема исчезла, и приложения .NET "просто работают"; пожалуйста, проголосуйте, если вы согласитесь:
http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2397357-fix-it-so-that-net-apps-can-access-http-thru-auth

Ответ 3

WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;

Это заставит DefaultWebProxy использовать учетные данные по умолчанию, аналогичный эффект, как это сделано через UseDefaultCredentials = true.

Следовательно, все создаваемые экземпляры WebRequest будут использовать прокси-сервер по умолчанию, который был настроен для использования учетных данных по умолчанию для прокси-сервера.

Ответ 4

Вы можете использовать Reflection, чтобы установить UseDefaultCredentials -Property из кода в "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;

Ответ 5

Этот поток старый, но я только что наткнулся на проблему defaultProxy и, возможно, он помогает другим.

Я использовал настройку конфигурации, как предложил Эндрю. При развертывании его клиент получил сообщение об ошибке: не было достаточных прав на установку конфигурации defaultProxy.

Не зная, почему у меня нет права устанавливать эту конфигурацию и что с ней делать, я просто удалил ее и все еще работал. Похоже, что в VS2013 эта проблема исправлена.

И пока мы на нем:

    WebRequest.DefaultWebProxy.Credentials = new NetworkCredential("ProxyUsername", "ProxyPassword");

использует прокси-сервер по умолчанию с вашими учетными данными. Если вы хотите принудительно не использовать прокси-сервер, просто установите для DefaultWebProxy значение null (хотя я не знаю, хочет ли он этого).

Ответ 6

Похоже, что в некоторых новых приложениях Конфигурация отличается, как я видел в этом вопросе Как проверить подлинность прокси-сервера при использовании класса HttpClient?

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

Также зарегистрировано на https://msdn.microsoft.com/en-us/library/dkwyc043.aspx

Ответ 7

В моем развертывании я не могу использовать app.config, чтобы не вставлять то, что предложил Эндрю Вебб.
Поэтому я делаю это:

    IWebProxy proxy = WebRequest.GetSystemWebProxy();
    proxy.Credentials = CredentialCache.DefaultCredentials;

    WebClient wc = new WebClient();
    wc.UseDefaultCredentials = true;
    wc.Proxy = proxy;

На всякий случай вы хотите проверить мои настройки IE:

enter image description here

Ответ 8

Это новый предложенный метод.

WebRequest.GetSystemWebProxy();

Ответ 9

Требуется ли в некоторых системах значение null для прокси-сервера:

Net.WebRequest.DefaultWebProxy.Credentials = System.Net.CredentialCache.DefaultCredentials Dim request As WebRequest = WebRequest.Create(sRemoteFileURL) request.Proxy = Nothing

Это ошибка.