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
ERROR_WINHTTP_CANNOT_CONNECT
Se devuelve si se produjo un error en la conexión al servidor.
ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW
Se devuelve cuando se encuentra una condición de desbordamiento durante el análisis de la codificación fragmentada.
ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED
Se devuelve cuando el servidor solicita autenticación de cliente.
ERROR_WINHTTP_CONNECTION_ERROR
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.
ERROR_WINHTTP_HEADER_COUNT_EXCEEDED
Se devuelve cuando un número mayor de encabezados estaban presentes en una respuesta que WinHTTP podía recibir.
ERROR_WINHTTP_HEADER_SIZE_OVERFLOW
Devuelto por WinHttpReceiveResponse cuando el tamaño de los encabezados recibidos supera el límite del identificador de solicitud.
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
No se puede llevar a cabo la operación solicitada porque el identificador proporcionado no está en el estado correcto.
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
El tipo de identificador proporcionado es incorrecto para esta operación.
ERROR_WINHTTP_INTERNAL_ERROR
Se ha producido un error interno.
ERROR_WINHTTP_INVALID_SERVER_RESPONSE
No se pudo analizar la respuesta del servidor.
ERROR_WINHTTP_INVALID_URL
La dirección URL no es válida.
ERROR_WINHTTP_LOGIN_FAILURE
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.
ERROR_WINHTTP_NAME_NOT_RESOLVED
No se pudo resolver el nombre del servidor.
ERROR_WINHTTP_OPERATION_CANCELLED
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_WINHTTP_REDIRECT_FAILED
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_WINHTTP_RESEND_REQUEST
Error en la función WinHTTP. La función deseada se puede reintentar en el mismo identificador de solicitud.
ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW
Se devuelve cuando una respuesta entrante supera un límite interno de tamaño winHTTP.
ERROR_WINHTTP_SECURE_FAILURE
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.
ERROR_WINHTTP_TIMEOUT
La solicitud ha agotado el tiempo de espera.
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
La dirección URL especificó un esquema distinto de "http:" o "https:".
ERROR_NOT_ENOUGH_MEMORY
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
Si el servidor cierra la conexión, también se notificarán las siguientes notificaciones, siempre que se hayan establecido en el parámetro dwNotificationFlags de WinHttpSetStatusCallback:
  • WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION
  • WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
Nota Para Windows XP y Windows 2000, consulta la sección Requisitos en tiempo de ejecución de la página de inicio de WinHttp.
 

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.

Consulte también

Acerca de los servicios HTTP de Microsoft Windows (WinHTTP)

Versiones de WinHTTP

WinHttpCloseHandle

WinHttpOpen

WinHttpOpenRequest

WinHttpSendRequest