Вопрос

Я пытаюсь выяснить, как надежно обрабатывать ошибки аутентификации прокси (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 все равно использует системные настройки.

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Я знаю, что это старый пост, но у меня была похожая проблема при попытке загрузить файл 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top