В статье MSDN " Обработка аутентификации " автор пишет:
Прокси-аутентификация
Когда клиент пытаетсяПри использовании прокси-сервера, который требует аутентификации, он возвращает клиенту сообщение с кодом состояния 407.В этом сообщении прокси должен включать один или несколько заголовков ответа Proxy-Authenticate.Эти заголовки включают в себя методы аутентификации, доступные через прокси.WinINet выбирает первый метод, который он распознает.
Функцию InternetErrorDlg
можно использовать для получения данных имени пользователя и пароля от пользователя , либо можно создать настраиваемый пользовательский интерфейс.
После более продолжительного поиска я обнаружил статью базы знаний Майкрософт " Как обрабатывать авторизацию прокси с WinInet ", в которой приведен пример использования этой функции для аутентификации пользователя прокси..
Они предоставляют (C ++) пример кода с:
if ( InternetErrorDlg (GetDesktopWindow(),
hReq, ERROR_INTERNET_INCORRECT_PASSWORD,
FLAGS_ERROR_UI_FILTER_FOR_ERRORS |
FLAGS_ERROR_UI_FLAGS_GENERATE_DATA |
FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS,
NULL) == ERROR_INTERNET_FORCE_RETRY)
goto again;
(см. это сообщение в блоге MSDN для примера P / Invoke функции InternetErrorDlg
).
В статье «Обработка аутентификации» далее говорится:
Пользовательский интерфейс может использовать функцию InternetSetOption
для установки INTERNET_OPTION_PROXY_PASSWORD
и INTERNET_OPTION_PROXY_USERNAME
значений, а затем повторно отправьте запрос в прокси.
Поэтому я могу предположить, что следующий «рабочий процесс» может быть успешным:
- Установите для прокси-сервера использование прокси-сервера по умолчанию, например,
request.Proxy = WebRequest.GetSystemWebProxy()
. - Запросите URL с
HttpWebRequest
(или FtpWebRequest
). - Если407 Код возврата HTTP возвращается, вызовите функцию
InternetErrDlg
. - Повторите запрос URL.
Этот может работать, так как этот ответ утверждает, что он успешно использовал WebRequest
, когда он только недавно открыл Internet Explorer и ввел там свои учетные данные прокси.
Поэтому я предполагаю, что информация прокси хранится где-то в «пользовательской сессии» Windows до тех поркак пользователь вошел в систему и доступен для всех приложений после аутентификации.
Поскольку я столкнулся с той же проблемой, что и оригинальный постер, сейчас я попытаюсь увидеть, как мои предложения на самом деле работают.