WinHttpReceiveResponse() всегда возвращает ERROR_INTERNET_INCORRECT_HANDLE_STATE

Я пытаюсь добавить аутентификацию WinHTTP в мое приложение. Приложение должно подключиться к IIS и передать некоторые данные. После отправки некоторых порций данных с WinHttpWriteData() API (Transfer-Encoding: Chunked), на сетевом мониторе видно, что IIS ответил 401 (не авторизовано). Однако, если я позвоню WinHttpReceiveResponse() чтобы получить этот ответ, этот API всегда терпит неудачу с ERROR_INTERNET_INCORRECT_HANDLE_STATE, Документация не определяет "состояние", поэтому для меня это практически бессмысленно. Следует также упомянуть, что я могу без проблем общаться с IIS, если создаю правило авторизации для всех пользователей без какой-либо аутентификации. Кроме того, ни один из приведенных в MSDN примеров, касающихся проверки подлинности WinHTTP, не работает, когда я пробую их на своем IIS.

рабочий пример без авторизации:

// Send the chunk size
WinHttpWriteData( httpPostRequest, httpChunkData, (DWORD)strlen( httpChunkData ), &dwWritten );
// Send the data
WinHttpWriteData( httpPostRequest, pData, size, &dwWritten );
// Send the end
WinHttpWriteData( httpPostRequest, "\r\n", 2, &dwWritten );

401 прибывает после последнего WinHttpWriteData(), но я не могу получить это с WinHttpReceiveResponse(),
Если бы кто-нибудь мог предоставить всего несколько строк псевдокода о том, как это сделать, я был бы очень признателен.

РЕДАКТИРОВАТЬ: я использую WinHTTP в синхронном режиме.

РЕДАКТИРОВАНИЕ № 2: Приведенное выше описание было связано с базовой аутентификацией. Я отключил его и включил проверку подлинности Windows. Я прочитал http://msdn.microsoft.com/en-us/library/windows/desktop/aa383144(v=vs.85).aspx более одного раза, и в результате получается:

WinHttpSendRequest() - SUCCESS
WinHttpReceiveResponse() - SUCCESS
WinHttpQueryHeaders() - SUCCESS, status code = 401
WinHttpQueryAuthSchemes() - SUCCESS, auth scheme = WINHTTP_AUTH_SCHEME_NEGOTIATE
WinHttpSetCredentials() - SUCCESS

now I repeat the first two calls:
WinHttpSendRequest() - SUCCESS
WinHttpReceiveResponse() - FAILURE with code ERROR_WINHTTP_CONNECTION_ERROR

Кажется, что вход в систему IIS показывает, что имя пользователя / пароль неверны. Я даже пытался войти в систему как администратор, но это тоже не работает. К сожалению, что-то очень важное отсутствует в плохой документации MS.

РЕДАКТИРОВАТЬ № 3
Нашел проблему!

WinHttpSendRequest( hPostRequest,
                    L"Transfer-Encoding: Chunked\r\n",
                    (DWORD)-1,
                    WINHTTP_NO_REQUEST_DATA,
                    0,
                    WINHTTP_IGNORE_REQUEST_TOTAL_LENGTH,
                    0 );

Если я удаляю дополнительные заголовки (Transfer-Encoding: Chunked), то это работает, но мне нужно это chunked encoding. Есть ли решение для этого?

0 ответов

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