Partager via


Fonction WinHttpQueryHeaders (winhttp.h)

La fonction WinHttpQueryHeaders récupère les informations d’en-tête associées à une requête HTTP.

Consultez également WinHttpQueryHeadersEx, qui offre un moyen de récupérer les chaînes de valeur et de nom d’en-tête analysés.

Syntaxe

WINHTTPAPI BOOL WinHttpQueryHeaders(
  [in]           HINTERNET hRequest,
  [in]           DWORD     dwInfoLevel,
  [in, optional] LPCWSTR   pwszName,
  [out]          LPVOID    lpBuffer,
  [in, out]      LPDWORD   lpdwBufferLength,
  [in, out]      LPDWORD   lpdwIndex
);

Paramètres

[in] hRequest

Handle de requête HINTERNET retourné par WinHttpOpenRequest. WinHttpReceiveResponse doit avoir été appelé pour ce handle et avoir terminé avant l’appel de WinHttpQueryHeaders .

[in] dwInfoLevel

Valeur de type DWORD qui spécifie une combinaison d’indicateurs d’attribut et de modificateur répertoriés dans la page Indicateurs d’informations de requête. Ces indicateurs d’attribut et de modificateur indiquent que les informations sont demandées et comment elles doivent être mises en forme.

[in, optional] pwszName

Pointeur vers une chaîne qui contient le nom de l’en-tête. Si l’indicateur dans dwInfoLevel n’est pas WINHTTP_QUERY_CUSTOM, définissez ce paramètre sur WINHTTP_HEADER_NAME_BY_INDEX.

[out] lpBuffer

Pointeur vers la mémoire tampon qui reçoit les informations. Si vous définissez ce paramètre sur WINHTTP_NO_OUTPUT_BUFFER, cette fonction retourne FALSE. L’appel de GetLastError retourne ensuite ERROR_INSUFFICIENT_BUFFER et lpdwBufferLength contient le nombre d’octets requis pour contenir les informations demandées.

[in, out] lpdwBufferLength

Pointeur vers une valeur de type DWORD qui spécifie la longueur de la mémoire tampon de données, en octets. Lorsque la fonction retourne, ce paramètre contient le pointeur vers une valeur qui spécifie la longueur des informations écrites dans la mémoire tampon. Lorsque la fonction retourne des chaînes, les règles suivantes s’appliquent.

  • Si la fonction réussit, lpdwBufferLength spécifie la longueur de la chaîne, en octets, moins 2 pour la valeur null de fin.
  • Si la fonction échoue et que ERROR_INSUFFICIENT_BUFFER est retourné, lpdwBufferLength spécifie le nombre d’octets que l’application doit allouer pour recevoir la chaîne.

[in, out] lpdwIndex

Pointeur vers un index d’en-tête de base zéro utilisé pour énumérer plusieurs en-têtes portant le même nom. Lors de l’appel de la fonction, ce paramètre est l’index de l’en-tête spécifié à retourner. Lorsque la fonction retourne, ce paramètre est l’index de l’en-tête suivant. Si l’index suivant est introuvable, ERROR_WINHTTP_HEADER_NOT_FOUND est retourné. Définissez ce paramètre sur WINHTTP_NO_HEADER_INDEX pour spécifier que seule la première occurrence d’un en-tête doit être retournée.

Valeur retournée

Retourne LA valeur TRUE si elle réussit ou FALSE dans le cas contraire. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError. Parmi les codes d’erreur retournés figurent les suivants.

Code d'erreur Description
ERROR_WINHTTP_HEADER_NOT_FOUND
Impossible de localiser l’en-tête demandé.
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
L’opération demandée ne peut pas être effectué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_NOT_ENOUGH_MEMORY
La mémoire disponible n’était pas suffisante pour effectuer l’opération demandée. (Code d’erreur Windows)

Remarques

Même lorsque WinHTTP est utilisé en mode asynchrone (c’est-à-dire, lorsque WINHTTP_FLAG_ASYNC a été défini dans WinHttpOpen), cette fonction fonctionne de manière synchrone. La valeur de retour indique la réussite ou l’échec. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Par défaut , WinHttpQueryHeaders retourne une chaîne. Toutefois, vous pouvez demander des données sous la forme d’une structure SYSTEMTIME ou DWORD en incluant l’indicateur de modificateur approprié dans dwInfoLevel. Le tableau suivant montre les types de données possibles que WinHttpQueryHeaders peut retourner, ainsi que l’indicateur de modificateur que vous utilisez pour sélectionner ce type de données.

Type de données Indicateur de modificateur
LPCWSTR Par défaut. Aucun indicateur de modificateur requis.
SYSTEMTIME WINHTTP_QUERY_FLAG_SYSTEMTIME
DWORD WINHTTP_QUERY_FLAG_NUMBER
 
Note Pour Windows XP et Windows 2000, consultez la section Conditions d’exécution de la page de démarrage WinHttp.
 

Exemples

L’exemple suivant montre comment obtenir un handle HINTERNET , ouvrir une session HTTP, créer et envoyer un en-tête de requête, et examiner l’en-tête de réponse retourné.

    DWORD dwSize = 0;
    LPVOID lpOutBuffer = NULL;
    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.microsoft.com",
                                   INTERNET_DEFAULT_HTTP_PORT, 0);

    // Create an HTTP request handle.
    if (hConnect)
        hRequest = WinHttpOpenRequest( hConnect, L"GET", NULL,
                                       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,
                                       0, 0);

    // End the request.
    if (bResults)
        bResults = WinHttpReceiveResponse( hRequest, NULL);

    // First, use WinHttpQueryHeaders to obtain the size of the buffer.
    if (bResults)
    {
        WinHttpQueryHeaders( hRequest, WINHTTP_QUERY_RAW_HEADERS_CRLF,
                             WINHTTP_HEADER_NAME_BY_INDEX, NULL,
                             &dwSize, WINHTTP_NO_HEADER_INDEX);

        // Allocate memory for the buffer.
        if( GetLastError( ) == ERROR_INSUFFICIENT_BUFFER )
        {
            lpOutBuffer = new WCHAR[dwSize/sizeof(WCHAR)];

            // Now, use WinHttpQueryHeaders to retrieve the header.
            bResults = WinHttpQueryHeaders( hRequest,
                                       WINHTTP_QUERY_RAW_HEADERS_CRLF,
                                       WINHTTP_HEADER_NAME_BY_INDEX,
                                       lpOutBuffer, &dwSize,
                                       WINHTTP_NO_HEADER_INDEX);
        }
    }

    // Print the header contents.
    if (bResults)
        printf("Header contents: \n%S",lpOutBuffer);

    // Free the allocated memory.
    delete [] lpOutBuffer;

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

Microsoft Windows HTTP Services (WinHTTP)

WinHTTP Versions

WinHttpCloseHandle

WinHttpConnect

WinHttpOpen

WinHttpOpenRequest