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
ERROR_WINHTTP_CANNOT_CONNECT
Restituito se la connessione al server non è riuscita.
ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW
Restituito quando viene rilevata una condizione di overflow durante l'analisi della codifica in blocchi.
ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED
Restituito quando il server richiede l'autenticazione client.
ERROR_WINHTTP_CONNECTION_ERROR
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.
ERROR_WINHTTP_HEADER_COUNT_EXCEEDED
Restituito quando un numero maggiore di intestazioni era presente in una risposta rispetto a WinHTTP poteva ricevere.
ERROR_WINHTTP_HEADER_SIZE_OVERFLOW
Restituito da WinHttpReceiveResponse quando le dimensioni delle intestazioni ricevute superano il limite per l'handle di richiesta.
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
Impossibile eseguire l'operazione richiesta perché l'handle fornito non è nello stato corretto.
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
Il tipo di handle fornito non è corretto per questa operazione.
ERROR_WINHTTP_INTERNAL_ERROR
Si è verificato un errore interno.
ERROR_WINHTTP_INVALID_SERVER_RESPONSE
Impossibile analizzare la risposta del server.
ERROR_WINHTTP_INVALID_URL
L'URL non è valido.
ERROR_WINHTTP_LOGIN_FAILURE
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.
ERROR_WINHTTP_NAME_NOT_RESOLVED
Impossibile risolvere il nome del server.
ERROR_WINHTTP_OPERATION_CANCELLED
L'operazione è stata annullata, in genere perché l'handle su cui era operativa la richiesta è stato chiuso prima del completamento dell'operazione.
ERROR_WINHTTP_REDIRECT_FAILED
Il reindirizzamento non è riuscito perché lo schema è stato modificato o tutti i tentativi di reindirizzamento non riusciti (il valore predefinito è cinque tentativi).
ERROR_WINHTTP_RESEND_REQUEST
La funzione WinHTTP non è riuscita. La funzione desiderata può essere ritentata sullo stesso handle di richiesta.
ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW
Restituito quando una risposta in ingresso supera un limite di dimensioni WinHTTP interno.
ERROR_WINHTTP_SECURE_FAILURE
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.
ERROR_WINHTTP_TIMEOUT
Timeout della richiesta.
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
L'URL ha specificato uno schema diverso da "http:" o "https:".
ERROR_NOT_ENOUGH_MEMORY
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
Se il server chiude la connessione, verranno segnalate anche le notifiche seguenti, purché siano state impostate nel parametro dwNotificationFlags di WinHttpSetStatusCallback:
  • WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION
  • WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
Nota Per Windows XP e Windows 2000, vedere la sezione Requisiti di runtime della pagina iniziale di WinHttp.
 

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)

Versioni di WinHTTP

WinHttpCloseHandle

WinHttpOpen

WinHttpOpenRequest

WinHttpSendRequest