Funzione WinHttpReceiveResponse (winhttp.h)
La funzione WinHttpReceiveResponse attende di ricevere la risposta a una richiesta HTTP avviata da WinHttpSendRequest. Quando WinHttpReceiveResponse viene completato correttamente, il codice di stato e le intestazioni di risposta sono state ricevute e sono disponibili per l'applicazione per controllare l'uso di WinHttpQueryHeaders. Un'applicazione deve chiamare WinHttpReceiveResponse prima di poter usare WinHttpQueryDataAvailable e WinHttpReadData per accedere al corpo dell'entità di risposta (se presente).
Sintassi
WINHTTPAPI BOOL WinHttpReceiveResponse(
[in] HINTERNET hRequest,
[in] LPVOID lpReserved
);
Parametri
[in] hRequest
Handle DELL'oggetto MAPNET restituito da WinHttpOpenRequest e inviato da WinHttpSendRequest. Attendere il completamento di WinHttpSendRequest per questo handle prima di chiamare WinHttpReceiveResponse.
[in] lpReserved
Questo parametro è riservato e deve essere NULL.
Valore restituito
Restituisce TRUE se l'operazione riesce o FALSE in caso contrario. Per informazioni sugli errori estesi, chiamare GetLastError. Tra i codici di errore restituiti sono riportati di seguito.
Codice di errore | Descrizione |
---|---|
|
Restituito se la connessione al server non è riuscita. |
|
Restituito quando viene rilevata una condizione di overflow durante l'analisi della codifica in blocchi. |
|
Restituito quando il server richiede l'autenticazione client. |
|
La connessione con il server è stata reimpostata o terminata oppure è stato rilevato un protocollo SSL incompatibile. Ad esempio, WinHTTP versione 5.1 non supporta SSL2 a meno che il client non lo consenta in modo specifico. |
|
Restituito quando un numero maggiore di intestazioni era presente in una risposta rispetto a WinHTTP poteva ricevere. |
|
Restituito da WinHttpReceiveResponse quando le dimensioni delle intestazioni ricevute superano il limite per l'handle di richiesta. |
|
Impossibile eseguire l'operazione richiesta perché l'handle fornito non è nello stato corretto. |
|
Il tipo di handle fornito non è corretto per questa operazione. |
|
Si è verificato un errore interno. |
|
Impossibile analizzare la risposta del server. |
|
L'URL non è valido. |
|
Tentativo di accesso non riuscito. Quando si verifica questo errore, l'handle della richiesta deve essere chiuso con WinHttpCloseHandle. È necessario creare un nuovo handle di richiesta prima di ritentare la funzione che ha originariamente generato questo errore. |
|
Impossibile risolvere il nome del server. |
|
L'operazione è stata annullata, in genere perché l'handle su cui era operativa la richiesta è stato chiuso prima del completamento dell'operazione. |
|
Il reindirizzamento non è riuscito perché lo schema è stato modificato o tutti i tentativi di reindirizzamento non riusciti (il valore predefinito è cinque tentativi). |
|
La funzione WinHTTP non è riuscita. La funzione desiderata può essere ritentata sullo stesso handle di richiesta. |
|
Restituito quando una risposta in ingresso supera un limite di dimensioni WinHTTP interno. |
|
Il certificato Secure Sockets Layer (SSL) inviato dal server sono stati rilevati uno o più errori. Per determinare il tipo di errore rilevato, verificare la presenza di una notifica di WINHTTP_CALLBACK_STATUS_SECURE_FAILURE in una funzione di callback di stato. Per altre informazioni, vedere WINHTTP_STATUS_CALLBACK. |
|
Timeout della richiesta. |
|
L'URL ha specificato uno schema diverso da "http:" o "https:". |
|
Memoria insufficiente per completare l'operazione richiesta. (Codice errore di Windows) |
Commenti
Anche quando WinHTTP viene usato in modalità asincrona , ovvero quando WINHTTP_FLAG_ASYNC è stato impostato in WinHttpOpen, questa funzione può operare in modo sincrono o asincrono. Se questa funzione restituisce FALSE, questa funzione non è riuscita ed è possibile chiamare GetLastError per ottenere informazioni sugli errori estese. Se questa funzione restituisce TRUE, l'applicazione deve prevedere il callback di completamento WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE , che indica l'esito positivo o il callback di completamento WINHTTP_CALLBACK_STATUS_REQUEST_ERROR , a indicare che l'operazione è stata completata in modo asincrono, ma non riuscita.
Se è stata installata una funzione di callback di stato con WinHttpSetStatusCallback, le notifiche seguenti impostate nel parametro dwNotificationFlags di WinHttpSetStatusCallback indicano lo stato di avanzamento nella ricezione della risposta:
- 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
Esempio
In questo esempio viene illustrato il codice che scrive i dati in un server HTTP. Il nome del server fornito nell'esempio , www.wingtiptoys.com, è fittizio e deve essere sostituito con il nome di un server per cui si dispone dell'accesso in scrittura.
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);
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows XP, Windows 2000 Professional con SP3 [solo app desktop] |
Server minimo supportato | Windows Server 2003, Windows 2000 Server con SP3 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | winhttp.h |
Libreria | Winhttp.lib |
DLL | Winhttp.dll |
Componente ridistribuibile | WinHTTP 5.0 e Internet Explorer 5.01 o versione successiva in Windows XP e Windows 2000. |
Vedi anche
Informazioni sui servizi HTTP di Microsoft Windows (WinHTTP)