Запрос WinHTTP проходит проверку подлинности на прокси, получает 401 от сайта, а затем при следующей отправке получает ещё один 407. У прокси и сайта отдельные состояния проверки подлинности, и путь повторной отправки должен сохранять оба.

Пример встроенной проверки подлинности WinHTTP от Microsoft хранит выбранную схему прокси в переменной и повторно применяет учётную запись прокси перед каждым WinHttpSendRequest после выбора этой схемы.

  1. Отправьте запрос и изучите ответ.
  2. При 407 запросите предложенные схемы и запомните выбранную схему прокси.
  3. Перед повторной отправкой вызовите WinHttpSetCredentials для WINHTTP_AUTH_TARGET_PROXY с этой схемой и учётной записью.
  4. При 401 от назначения получите его схему и задайте учётные данные сервера, сохранив запомненное состояние прокси для следующей отправки.

В примере особо отмечается повторная проверка подлинности после запроса сервера или перенаправления как причина повторно применять учётные данные прокси. Если вызов находится только в первой ветви 407, другой путь повтора останется без ожидаемой настройки.

Проверяйте каждый результат API и ограничивайте повторяющиеся сбои. Компактный пример Microsoft отслеживает предыдущий статус, а производственная политика повторов должна также распознавать повторяющуюся чередующуюся последовательность.

Если после сбоя пользователь предоставляет другую учётную запись, обновите значения, которые использует этот путь повторной отправки. WinHttpSetCredentials привязан к запросу; это не хранилище паролей уровня процесса, содержимое которого заменяется для всех будущих запросов.

Похожие статьи