WinHttpSendRequest и ERROR_WINHTTP_RESEND_REQUEST

Может ли GetLastError() вернуть ERROR_WINHTTP_RESEND_REQUEST после вызова WinHttpSendRequest?

Документация для WinHttpSendRequest:

ERROR_WINHTTP_RESEND_REQUEST
Приложение должно снова вызвать WinHttpSendRequest из-за перенаправления или проверки подлинности. Windows Server 2003 с пакетом обновления 1 (SP1), Windows XP с пакетом обновления 2 (SP2) и Windows 2000: эта ошибка не поддерживается.

Но образцы из MSDN (аутентификация в WinHTTP) проверяют это значение после WinHttpReceiveResponse.


person Ali Asadpoor    schedule 26.07.2017    source источник
comment
Вероятно, вы ссылаетесь на пример по адресу эта страница. Посмотрите еще раз на код. Проверка ERROR_WINHTTP_RESEND_REQUEST выполняется, если WinHttpSendRequest() или WinHttpReceiveResponse() не удается.   -  person zett42    schedule 26.07.2017


Ответы (1)


Но образцы из MSDN (аутентификация в WinHTTP) проверяют это значение после WinHttpReceiveResponse.

На первый взгляд пример может выглядеть так. Но если присмотреться, в примере действительно проверяется ERROR_WINHTTP_RESEND_REQUEST, если либо WinHttpSendRequest() или WinHttpReceiveResponse() не удается:

// Send a request.
bResults = WinHttpSendRequest( hRequest,
                               WINHTTP_NO_ADDITIONAL_HEADERS,
                               0,
                               WINHTTP_NO_REQUEST_DATA,
                               0, 
                               0, 
                               0 );

// End the request.
if( bResults )
  bResults = WinHttpReceiveResponse( hRequest, NULL );

// Resend the request in case of 
// ERROR_WINHTTP_RESEND_REQUEST error.
if( !bResults && GetLastError( ) == ERROR_WINHTTP_RESEND_REQUEST)
    continue;

Если WinHttpSendRequest() возвращает FALSE, вызов WinHttpReceiveResponse() будет пропущен, а GetLastError() будет проверен на наличие ERROR_WINHTTP_RESEND_REQUEST. Этот код находится внутри цикла while, поэтому оператор continue приведет к тому, что оставшаяся часть цикла будет пропущена, поэтому WinHttpSendRequest() будет вызвана снова.

Вывод. Образец соответствует справочной документации.

person zett42    schedule 26.07.2017