Ошибка System.Net.WebClient и Proxy Authentication 407. - PullRequest
12 голосов
/ 30 июля 2009

Я пытаюсь выяснить, как надежно обрабатывать ошибки аутентификации прокси (HTTP) 407 код состояния) при использовании класса System.Net.WebClient.

В поле мы видим много пользователей, получающих аутентификацию прокси 407 WebException, но я не уверен, что такое хорошая стратегия по умолчанию. В .Net 2.0 / 3.5, настройки аутентификации прокси должны наследоваться от системные настройки Internet Explorer. Firefox, Opera и Chrome используют эти такие же настройки.

Вот основной код, который мы используем:

using System.Net;

string url = "http://www.mysite.com";
WebClient webClient = new WebClient();
byte[] data = webClient.DownloadFile(url);

Когда этот код не работает, мы открываем браузер пользователя и отправляем его в помощь стр. Из наших веб-журналов мы знаем, что эти клиенты могут успешно подключиться в их браузеры. Возможно, они вручную вводят свое имя пользователя прокси и пароль, прежде чем они попадут на нашу страницу помощи? Мы не знаем.

Кажется, что мы могли бы использовать WebClient.UseDefaultCredentials, но это кажется излишним, если WebClient все равно использует системные настройки.

Любая помощь приветствуется.

Ответы [ 3 ]

11 голосов
/ 30 июля 2009

Internet Explorer не осуществляет постоянное кэширование / повторное использование учетных данных для проверки подлинности прокси, если для проверки подлинности прокси используется BASIC или DIGEST. Для переговоров / NTLM будут предоставлены учетные данные по умолчанию.

Следовательно, даже если .NET наследует от настроек IE, вы не получите никакой «бесплатной» поддержки для проверки подлинности прокси для Basic / Digest, если вы не работаете в IE; вам нужно будет подсказать пользователю или предоставить экран конфигурации.

У Fiddler (www.fiddler2.com) есть опция «Запрос аутентификации прокси» в меню «Правила», которую можно использовать для имитации этого сценария для тестирования.

6 голосов
/ 04 декабря 2012

Я знаю, что это старый пост, но у меня была похожая проблема при попытке загрузить файл XML с помощью WebClient в задаче сценария SSIS 2008R2 (службы SQL Server Integration Services) (код VB.NET) через прокси-сервер на удаленный сайт защищен через SSL, что также требует аутентификации.

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

    Dim objWebClient As WebClient = New WebClient()
    Dim objCache As New CredentialCache()

    'https://www.company.net/xxxx/resources/flt
    Dim strDownloadURL As String = Dts.Variables("FileURL").Value.ToString

    'apiaccount@company.net
    Dim strLogin As String = Dts.Variables("FileLogin").Value.ToString

    'sitepassword
    Dim strPass As String = Dts.Variables("FilePass").Value.ToString

    'itwsproxy.mycompany.com
    Dim strProxyURL As String = Dts.Variables("WebProxyURL").Value.ToString

    '8080
    Dim intProxyPort As Integer = Dts.Variables("WebProxyPort").Value

    'Set Proxy & Credentials as a Network Domain User acc to get through the Proxy
    Dim wp As WebProxy = New WebProxy(strProxyURL, intProxyPort)
    wp.Credentials = New NetworkCredential("userlogin", "password", "domain")
    objWebClient.Proxy = wp

    'Set the Credentials for the Remote Server not the Network Proxy
    objCache.Add(New Uri(strDownloadURL), "Basic", New NetworkCredential(strLogin, strPass))
    objWebClient.Credentials = objCache

    'Download file, use Flat File Connectionstring to save the file
    objWebClient.DownloadFile(strDownloadURL, Dts.Connections("XMLFile").ConnectionString)
6 голосов
/ 30 июля 2009

Мы решили эту проблему, добавив диалоговое окно конфигурации, которое позволяет пользователю выбрать «использовать прокси». Если эта настройка выполнена, мы используем эти параметры (адрес, учетные данные ...). Если нет - мы предполагаем, что соединение может быть установлено без какого-либо ручного взаимодействия. В случае ошибки мы делаем: а) попробуйте еще раз, используя учетные данные по умолчанию б) всплывающая информация, что настройка в конфигурации может помочь ...

Если проверка подлинности прокси выполняется с помощью «учетных данных по умолчанию» (пользователь Windows), IE также реагирует на ошибку аутентификации и в этом случае отправляет учетные данные по умолчанию. Если это не работает, он открывает диалоговое окно учетных данных. Я не уверен, что все браузеры справляются с этим таким образом - но вы можете просто попробовать это с помощью fiddler, чтобы вы могли видеть, что происходит.

...