Запит WinHTTP проходить автентифікацію на проксі, отримує 401 від сайту, а потім під час наступного надсилання отримує ще один 407. Проксі та сайт мають окремі стани автентифікації, і шлях повторного надсилання має зберігати обидва.

Приклад вбудованої автентифікації WinHTTP від Microsoft зберігає вибрану схему проксі у змінній і повторно застосовує обліковий запис проксі перед кожним WinHttpSendRequest після вибору цієї схеми.

  1. Надішліть запит і перегляньте відповідь.
  2. Для 407 запитайте запропоновані схеми та запам'ятайте вибрану схему проксі.
  3. Перед повторним надсиланням викличте WinHttpSetCredentials для WINHTTP_AUTH_TARGET_PROXY з цією схемою та обліковим записом.
  4. Для 401 від призначення отримайте його схему та задайте облікові дані сервера, зберігаючи запам'ятований стан проксі для наступного надсилання.

Приклад окремо зазначає повторну автентифікацію після виклику сервера або переспрямування як причину повторно застосовувати облікові дані проксі. Якщо виклик розміщено лише в першій гілці 407, інший шлях повтору може залишитися без очікуваного налаштування.

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

Якщо після збою користувач надає замісний обліковий запис, оновіть значення, які використовує цей шлях повторного надсилання. WinHttpSetCredentials прив'язаний до запиту; це не сховище паролів рівня процесу, вміст якого замінюється для всіх майбутніх запитів.

Схожі статті