Función WinHttpReceiveResponse (winhttp.h)
La función WinHttpReceiveResponse espera a recibir la respuesta a una solicitud HTTP iniciada por WinHttpSendRequest. Cuando WinHttpReceiveResponse se completa correctamente, se han recibido el código de estado y los encabezados de respuesta y están disponibles para que la aplicación inspeccione mediante WinHttpQueryHeaders. Una aplicación debe llamar a WinHttpReceiveResponse para poder usar WinHttpQueryDataAvailable y WinHttpReadData para acceder al cuerpo de la entidad de respuesta (si existe).
Sintaxis
WINHTTPAPI BOOL WinHttpReceiveResponse(
[in] HINTERNET hRequest,
[in] LPVOID lpReserved
);
Parámetros
[in] hRequest
Identificador HINTERNET devuelto por WinHttpOpenRequest y enviado por WinHttpSendRequest. Espere hasta que WinHttpSendRequest se haya completado para este identificador antes de llamar a WinHttpReceiveResponse.
[in] lpReserved
Este parámetro está reservado y debe ser NULL.
Valor devuelto
Devuelve TRUE si se ejecuta correctamente o FALSE de lo contrario. Para obtener información de error extendida, llame a GetLastError. Entre los códigos de error devueltos se incluyen los siguientes.
Código de error | Descripción |
---|---|
|
Se devuelve si se produjo un error en la conexión al servidor. |
|
Se devuelve cuando se encuentra una condición de desbordamiento durante el análisis de la codificación fragmentada. |
|
Se devuelve cuando el servidor solicita autenticación de cliente. |
|
Se ha restablecido o finalizado la conexión con el servidor, o se encontró un protocolo SSL incompatible. Por ejemplo, WinHTTP versión 5.1 no admite SSL2 a menos que el cliente lo habilite específicamente. |
|
Se devuelve cuando un número mayor de encabezados estaban presentes en una respuesta que WinHTTP podía recibir. |
|
Devuelto por WinHttpReceiveResponse cuando el tamaño de los encabezados recibidos supera el límite del identificador de solicitud. |
|
No se puede llevar a cabo la operación solicitada porque el identificador proporcionado no está en el estado correcto. |
|
El tipo de identificador proporcionado es incorrecto para esta operación. |
|
Se ha producido un error interno. |
|
No se pudo analizar la respuesta del servidor. |
|
La dirección URL no es válida. |
|
Error en el intento de inicio de sesión. Cuando se detecta este error, el identificador de solicitud debe cerrarse con WinHttpCloseHandle. Se debe crear un nuevo identificador de solicitud antes de reintentar la función que generó este error originalmente. |
|
No se pudo resolver el nombre del servidor. |
|
La operación se canceló, normalmente porque el identificador en el que estaba funcionando la solicitud se cerró antes de que se completara la operación. |
|
Error en el redireccionamiento porque el esquema cambió o se produjo un error en todos los intentos realizados para redirigir (el valor predeterminado es cinco intentos). |
|
Error en la función WinHTTP. La función deseada se puede reintentar en el mismo identificador de solicitud. |
|
Se devuelve cuando una respuesta entrante supera un límite interno de tamaño winHTTP. |
|
Se encontraron uno o varios errores en el certificado de Capa de sockets seguros (SSL) enviado por el servidor. Para determinar qué tipo de error se encontró, compruebe si hay una notificación de WINHTTP_CALLBACK_STATUS_SECURE_FAILURE en una función de devolución de llamada de estado. Para obtener más información, consulte WINHTTP_STATUS_CALLBACK. |
|
La solicitud ha agotado el tiempo de espera. |
|
La dirección URL especificó un esquema distinto de "http:" o "https:". |
|
No había suficiente memoria disponible para completar la operación solicitada. (Código de error de Windows) |
Comentarios
Incluso cuando WinHTTP se usa en modo asincrónico (es decir, cuando se ha establecido WINHTTP_FLAG_ASYNC en WinHttpOpen), esta función puede funcionar de forma sincrónica o asincrónica. Si esta función devuelve FALSE, se produjo un error en esta función y puede llamar a GetLastError para obtener información de error extendida. Si esta función devuelve TRUE, la aplicación debe esperar la devolución de llamada de finalización WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE , lo que indica que se ha realizado correctamente o la devolución de llamada de finalización WINHTTP_CALLBACK_STATUS_REQUEST_ERROR , lo que indica que la operación se completó de forma asincrónica, pero no se pudo realizar.
Si se ha instalado una función de devolución de llamada de estado con WinHttpSetStatusCallback, las de las siguientes notificaciones que se han establecido en el parámetro dwNotificationFlags de WinHttpSetStatusCallback indican el progreso en la recepción de la respuesta:
- 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
Ejemplos
En este ejemplo se muestra el código que escribe datos en un servidor HTTP. El nombre del servidor proporcionado en el ejemplo, www.wingtiptoys.com, es ficticio y debe reemplazarse por el nombre de un servidor para el que tiene acceso de escritura.
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);
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP, Windows 2000 Professional con SP3 [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003, Windows 2000 Server con SP3 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | winhttp.h |
Library | Winhttp.lib |
Archivo DLL | Winhttp.dll |
Redistribuible | WinHTTP 5.0 e Internet Explorer 5.01 o posterior en Windows XP y Windows 2000. |