Вызов WinInet HttpSendRequest не передает информацию об аутентификации в следующий раз, когда я вызываю ее с тем же дескриптором соединения

Меня смущает следующая проблема, с которой я сталкиваюсь. Мы используем Windows 2008 R2 машину с установленным IE 8.0. Затем я пытаюсь программно подключиться к серверу с помощью вызова InternetConnect (учетные данные предоставляются в качестве аргументов, передаваемых ему). Это удается. Затем я вызываю HttpOpenRequest и HttpSendRequest. Вызовы HttpOpenRequest и HttpSendRequest выполняются с использованием того же дескриптора соединения, который был возвращен при вызове InternetConnect. В определенный момент времени HttpSendRequest начинает давать сбой. Из захвата трафика я вижу, что отсутствует информация об аутентификации, и он, в свою очередь, заставляет сервер возвращать результат 401. Вызов InternetSetOption с указанием INTERNET_OPTION_USERNAME и INTERNET_OPTION_PASSWORD не имеет никакого эффекта. После сбоя HttpSendRequest я вызываю GetLastError и получаю сначала ERROR_HTTP_INVALID_SERVER_RESPONSE, а затем ERROR_INTERNET_INCORRECT_HANDLE_STATE, если я пытаюсь повторно отправить свой запрос с помощью HttpSendRequest.

Может быть, кто-то из вас испытывал подобную проблему?

1 ответ

Решение

Я обнаружил, что это нормальный способ поведения клиента. Сначала он пытается связаться с ресурсом анонимно, а затем, если ему это не удается, он пытается использовать учетные данные. В рамках одного вызова функции можно иметь один результат 401, потому что следующий запрос сопровождается аутентификационными данными.

Другие вопросы по тегам