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 |
---|---|
|
Retourné si la connexion au serveur a échoué. |
|
Retourné lorsqu’une condition de dépassement de capacité est rencontrée au cours de l’analyse de l’encodage segmenté. |
|
Retourné lorsque le serveur demande l’authentification du client. |
|
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. |
|
Retourné lorsqu’un plus grand nombre d’en-têtes étaient présents dans une réponse que WinHTTP pouvait recevoir. |
|
Retourné par WinHttpReceiveResponse lorsque la taille des en-têtes reçus dépasse la limite du handle de requête. |
|
Impossible d’effectuer l’opération demandée, car le handle fourni n’est pas dans l’état correct. |
|
Le type de handle fourni est incorrect pour cette opération. |
|
Une erreur interne s'est produite. |
|
Impossible d’analyser la réponse du serveur. |
|
L’URL n’est pas valide. |
|
É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. |
|
Impossible de résoudre le nom du serveur. |
|
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. |
|
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). |
|
Échec de la fonction WinHTTP. La fonction souhaitée peut être retentée sur le même handle de requête. |
|
Retourné lorsqu’une réponse entrante dépasse une limite de taille WinHTTP interne. |
|
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. |
|
Le délai d'attente de la requête a expiré. |
|
L’URL a spécifié un schéma autre que « http : » ou « https : ». |
|
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
- WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION
- WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
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. |