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


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

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

к сожалению, WebProxy.GetDefaultProxy() устарела. А что мне еще делать?

(С помощью приложения.конфигурация для установки параметров defaultProxy не разрешена в моем развертывании)

9 59

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:

enter image description here

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

WebRequest.GetSystemWebProxy();

потребность в некоторых системах устанавливают нулевые Прокси-proprerty:

Net.WebRequest.DefaultWebProxy.Учетные Данные = Система.Чистая.Класс credentialcache.Свойство defaultcredentials Тусклый запрос как WebRequest = WebRequest.Создать(sRemoteFileURL) запрос.Прокси = Ничего

Это ошибка.