Функция WinHttpReceiveResponse (winhttp.h)
Функция WinHttpReceiveResponse ожидает получения ответа на HTTP-запрос, инициированный WinHttpSendRequest. Когда winHttpReceiveResponse успешно завершается, код состояния и заголовки ответа получены и доступны приложению для проверки с помощью WinHttpQueryHeaders. Приложение должно вызвать WinHttpReceiveResponse , прежде чем оно сможет использовать WinHttpQueryDataAvailable и WinHttpReadData для доступа к тексту сущности ответа (если таковой имеется).
Синтаксис
WINHTTPAPI BOOL WinHttpReceiveResponse(
[in] HINTERNET hRequest,
[in] LPVOID lpReserved
);
Параметры
[in] hRequest
Дескриптор HINTERNET , возвращенный WinHttpOpenRequest и отправленный WinHttpSendRequest. Дождитесь завершения winHttpSendRequest для этого дескриптора, прежде чем вызывать WinHttpReceiveResponse.
[in] lpReserved
Этот параметр зарезервирован и должен иметь значение NULL.
Возвращаемое значение
Возвращает значение TRUE в случае успешного выполнения или FALSE в противном случае. Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError. Среди возвращаемых кодов ошибок приведены следующие.
Код ошибки | Описание |
---|---|
|
Возвращается при сбое подключения к серверу. |
|
Возвращается при обнаружении условия переполнения в процессе анализа фрагментированного кодирования. |
|
Возвращается, когда сервер запрашивает проверку подлинности клиента. |
|
Подключение к серверу было сброшено или прервано, или обнаружен несовместимый протокол SSL. Например, WinHTTP версии 5.1 не поддерживает SSL2, если только клиент специально не включает его. |
|
Возвращается, когда в ответе было больше заголовков, чем может получить WinHTTP. |
|
Возвращается WinHttpReceiveResponse , когда размер полученных заголовков превышает ограничение для дескриптора запроса. |
|
Запрошенная операция не может быть выполнена, так как предоставленный дескриптор находится в неправильном состоянии. |
|
Для этой операции указан неправильный тип дескриптора. |
|
Произошла внутренняя ошибка. |
|
Не удалось проанализировать ответ сервера. |
|
Недопустимый URL-адрес. |
|
Попытка входа завершилась сбоем. При обнаружении этой ошибки дескриптор запроса должен быть закрыт с помощью WinHttpCloseHandle. Перед повтором функции, которая изначально вызвала эту ошибку, необходимо создать новый дескриптор запроса. |
|
Не удалось разрешить имя сервера. |
|
Операция была отменена, как правило, из-за того, что дескриптор, с которым работал запрос, был закрыт до завершения операции. |
|
Сбой перенаправления из-за изменения схемы или неудачи всех попыток перенаправления (по умолчанию — пять попыток). |
|
Сбой функции WinHTTP. Требуемую функцию можно повторно выполнить в том же дескрипторове запроса. |
|
Возвращается, когда входящий ответ превышает внутренний предел размера WinHTTP. |
|
В SSL-сертификате, отправленном сервером, обнаружена одна или несколько ошибок. Чтобы определить тип ошибки, проверка WINHTTP_CALLBACK_STATUS_SECURE_FAILURE уведомление в функции обратного вызова состояния. Дополнительные сведения см. в разделе WINHTTP_STATUS_CALLBACK. |
|
Истекло время ожидания запроса. |
|
URL-адрес указывает схему, отличаемую от "http:" или "https:". |
|
Недостаточно памяти для выполнения запрошенной операции. (Код ошибки Windows) |
Комментарии
Даже если WinHTTP используется в асинхронном режиме (то есть, когда WINHTTP_FLAG_ASYNC задано в WinHttpOpen), эта функция может работать как синхронно, так и асинхронно. Если эта функция возвращает значение FALSE, эта функция завершилась сбоем, и вы можете вызвать GetLastError , чтобы получить расширенные сведения об ошибке. Если эта функция возвращает значение TRUE, приложение должно ожидать либо обратный вызов завершения WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE , указывающий на успешное выполнение, либо обратный вызов завершения WINHTTP_CALLBACK_STATUS_REQUEST_ERROR , указывающий, что операция выполнена асинхронно, но завершилась сбоем.
Если функция обратного вызова состояния была установлена с winHttpSetStatusCallback, то следующие уведомления, заданные в параметре dwNotificationFlagswinHttpSetStatusCallback , указывают на ход получения ответа:
- WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE
- WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED
- WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
- WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE
- WINHTTP_CALLBACK_STATUS_REDIRECT
- WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION
- WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
Примеры
В этом примере показан код, который записывает данные на HTTP-сервер. Имя сервера, указанное в примере , www.wingtiptoys.com, является вымышленным и должно быть заменено именем сервера, для которого у вас есть доступ на запись.
LPSTR pszData = "WinHttpWriteData Example";
DWORD dwBytesWritten = 0;
BOOL bResults = FALSE;
HINTERNET hSession = NULL,
hConnect = NULL,
hRequest = NULL;
// Use WinHttpOpen to obtain a session handle.
hSession = WinHttpOpen( L"A WinHTTP Example Program/1.0",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0);
// Specify an HTTP server.
if (hSession)
hConnect = WinHttpConnect( hSession, L"www.wingtiptoys.com",
INTERNET_DEFAULT_HTTP_PORT, 0);
// Create an HTTP Request handle.
if (hConnect)
hRequest = WinHttpOpenRequest( hConnect, L"PUT",
L"/writetst.txt",
NULL, WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
0);
// Send a Request.
if (hRequest)
bResults = WinHttpSendRequest( hRequest,
WINHTTP_NO_ADDITIONAL_HEADERS,
0, WINHTTP_NO_REQUEST_DATA, 0,
(DWORD)strlen(pszData), 0);
// Write data to the server.
if (bResults)
bResults = WinHttpWriteData( hRequest, pszData,
(DWORD)strlen(pszData),
&dwBytesWritten);
// End the request.
if (bResults)
bResults = WinHttpReceiveResponse( hRequest, NULL);
// Report any errors.
if (!bResults)
printf("Error %d has occurred.\n",GetLastError());
// Close any open handles.
if (hRequest) WinHttpCloseHandle(hRequest);
if (hConnect) WinHttpCloseHandle(hConnect);
if (hSession) WinHttpCloseHandle(hSession);
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP, Windows 2000 Профессиональная с пакетом обновления 3 (SP3) [только классические приложения] |
Минимальная версия сервера | Windows Server 2003, Windows 2000 Server с пакетом обновления 3 (SP3) [только классические приложения] |
Целевая платформа | Windows |
Header | winhttp.h |
Библиотека | Winhttp.lib |
DLL | Winhttp.dll |
Распространяемые компоненты | WinHTTP 5.0 и Internet Обозреватель 5.01 или более поздней версии в Windows XP и Windows 2000. |