Когда WinHTTP чередует 407 и 401
Сохраняйте выбранное состояние проверки подлинности прокси и применяйте его повторно перед повторами, отдельно обрабатывая запрос проверки подлинности назначения.
Запрос WinHTTP проходит проверку подлинности на прокси, получает 401 от сайта, а затем при следующей отправке получает ещё один 407. У прокси и сайта отдельные состояния проверки подлинности, и путь повторной отправки должен сохранять оба.
Пример встроенной проверки подлинности WinHTTP от Microsoft хранит выбранную схему прокси в переменной и повторно применяет учётную запись прокси перед каждым WinHttpSendRequest после выбора этой схемы.
- Отправьте запрос и изучите ответ.
- При 407 запросите предложенные схемы и запомните выбранную схему прокси.
- Перед повторной отправкой вызовите WinHttpSetCredentials для WINHTTP_AUTH_TARGET_PROXY с этой схемой и учётной записью.
- При 401 от назначения получите его схему и задайте учётные данные сервера, сохранив запомненное состояние прокси для следующей отправки.
В примере особо отмечается повторная проверка подлинности после запроса сервера или перенаправления как причина повторно применять учётные данные прокси. Если вызов находится только в первой ветви 407, другой путь повтора останется без ожидаемой настройки.
Проверяйте каждый результат API и ограничивайте повторяющиеся сбои. Компактный пример Microsoft отслеживает предыдущий статус, а производственная политика повторов должна также распознавать повторяющуюся чередующуюся последовательность.
Если после сбоя пользователь предоставляет другую учётную запись, обновите значения, которые использует этот путь повторной отправки. WinHttpSetCredentials привязан к запросу; это не хранилище паролей уровня процесса, содержимое которого заменяется для всех будущих запросов.