WinHttpReceiveResponse, fonction (winhttp.h)

La fonction WinHttpReceiveResponse attend de recevoir la réponse à une requête HTTP initiée par WinHttpSendRequest. Lorsque WinHttpReceiveResponse se termine correctement, les en-têtes de code et de réponse status ont été reçus et peuvent être inspectés par l’application à l’aide de WinHttpQueryHeaders. Une application doit appeler WinHttpReceiveResponse avant de pouvoir utiliser WinHttpQueryDataAvailable et WinHttpReadData pour accéder au corps de l’entité de réponse (le cas échéant).

Syntaxe

WINHTTPAPI BOOL WinHttpReceiveResponse(
  [in] HINTERNET hRequest,
  [in] LPVOID    lpReserved
);

Paramètres

[in] hRequest

Handle HINTERNET retourné par WinHttpOpenRequest et envoyé par WinHttpSendRequest. Attendez que WinHttpSendRequest soit terminé pour ce handle avant d’appeler WinHttpReceiveResponse.

[in] lpReserved

Ce paramètre est réservé et doit être NULL.

Valeur retournée

Retourne TRUE en cas de réussite, ou FALSE dans le cas contraire. Pour obtenir des informations d’erreur étendues, appelez GetLastError. Parmi les codes d’erreur retournés figurent les suivants.

Code d'erreur Description
ERROR_WINHTTP_CANNOT_CONNECT
Retourné si la connexion au serveur a échoué.
ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW
Retourné lorsqu’une condition de dépassement de capacité est rencontrée au cours de l’analyse de l’encodage segmenté.
ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED
Retourné lorsque le serveur demande l’authentification du client.
ERROR_WINHTTP_CONNECTION_ERROR
La connexion au serveur a été réinitialisée ou arrêtée, ou un protocole SSL incompatible a été rencontré. Par exemple, WinHTTP version 5.1 ne prend pas en charge SSL2, sauf si le client l’active spécifiquement.
ERROR_WINHTTP_HEADER_COUNT_EXCEEDED
Retourné lorsqu’un plus grand nombre d’en-têtes étaient présents dans une réponse que WinHTTP pouvait recevoir.
ERROR_WINHTTP_HEADER_SIZE_OVERFLOW
Retourné par WinHttpReceiveResponse lorsque la taille des en-têtes reçus dépasse la limite du handle de requête.
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
Impossible d’effectuer l’opération demandée, car le handle fourni n’est pas dans l’état correct.
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
Le type de handle fourni est incorrect pour cette opération.
ERROR_WINHTTP_INTERNAL_ERROR
Une erreur interne s'est produite.
ERROR_WINHTTP_INVALID_SERVER_RESPONSE
Impossible d’analyser la réponse du serveur.
ERROR_WINHTTP_INVALID_URL
L’URL n’est pas valide.
ERROR_WINHTTP_LOGIN_FAILURE
Échec de la tentative de connexion. Lorsque cette erreur se produit, le handle de requête doit être fermé avec WinHttpCloseHandle. Un nouveau handle de requête doit être créé avant de réessayer la fonction qui a initialement généré cette erreur.
ERROR_WINHTTP_NAME_NOT_RESOLVED
Impossible de résoudre le nom du serveur.
ERROR_WINHTTP_OPERATION_CANCELLED
L’opération a été annulée, généralement parce que le handle sur lequel la requête fonctionnait a été fermé avant la fin de l’opération.
ERROR_WINHTTP_REDIRECT_FAILED
La redirection a échoué car le schéma a changé ou toutes les tentatives de redirection ont échoué (la valeur par défaut est de cinq tentatives).
ERROR_WINHTTP_RESEND_REQUEST
Échec de la fonction WinHTTP. La fonction souhaitée peut être retentée sur le même handle de requête.
ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW
Retourné lorsqu’une réponse entrante dépasse une limite de taille WinHTTP interne.
ERROR_WINHTTP_SECURE_FAILURE
Une ou plusieurs erreurs ont été détectées dans le certificat SSL (Secure Sockets Layer) envoyé par le serveur. Pour déterminer le type d’erreur rencontré, case activée pour une notification WINHTTP_CALLBACK_STATUS_SECURE_FAILURE dans une fonction de rappel status. Pour plus d’informations, consultez WINHTTP_STATUS_CALLBACK.
ERROR_WINHTTP_TIMEOUT
Le délai d'attente de la requête a expiré.
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
L’URL a spécifié un schéma autre que « http : » ou « https : ».
ERROR_NOT_ENOUGH_MEMORY
La mémoire disponible était insuffisante pour terminer l’opération demandée. (Code d’erreur Windows)

Remarques

Même lorsque WinHTTP est utilisé en mode asynchrone (c’est-à-dire quand WINHTTP_FLAG_ASYNC a été défini dans WinHttpOpen), cette fonction peut fonctionner de manière synchrone ou asynchrone. Si cette fonction retourne FALSE, cette fonction a échoué et vous pouvez appeler GetLastError pour obtenir des informations d’erreur étendues. Si cette fonction retourne TRUE, l’application doit s’attendre à ce que le rappel d’achèvement WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE , indiquant la réussite, soit le rappel d’achèvement WINHTTP_CALLBACK_STATUS_REQUEST_ERROR , indiquant que l’opération s’est terminée de manière asynchrone, mais a échoué.

Si une fonction de rappel status a été installée avec WinHttpSetStatusCallback, celles des notifications suivantes qui ont été définies dans le paramètre dwNotificationFlags de WinHttpSetStatusCallback indiquent la progression de la réception de la réponse :

  • 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 le serveur ferme la connexion, les notifications suivantes sont également signalées, à condition qu’elles aient été définies dans le paramètre dwNotificationFlags de WinHttpSetStatusCallback :
  • WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION
  • WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
Note Pour Windows XP et Windows 2000, consultez la section Conditions requises pour l’exécution de la page de démarrage WinHttp.
 

Exemples

Cet exemple montre du code qui écrit des données sur un serveur HTTP. Le nom de serveur fourni dans l’exemple, www.wingtiptoys.com, est fictif et doit être remplacé par le nom d’un serveur pour lequel vous disposez d’un accès en écriture.

    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);

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP, Windows 2000 Professionnel avec SP3 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003, Windows 2000 Server avec SP3 [applications de bureau uniquement]
Plateforme cible Windows
En-tête winhttp.h
Bibliothèque Winhttp.lib
DLL Winhttp.dll
Composant redistribuable WinHTTP 5.0 et Internet Explorer 5.01 ou version ultérieure sur Windows XP et Windows 2000.

Voir aussi

À propos de Microsoft Windows HTTP Services (WinHTTP)

WinHTTP Versions

WinHttpCloseHandle

WinHttpOpen

WinHttpOpenRequest

WinHttpSendRequest