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 |
---|---|
|
Impossible de localiser l’en-tête demandé. |
|
L’opération demandée ne peut pas être effectué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. |
|
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 |
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)