Función WinHttpQueryHeaders (winhttp.h)
La función WinHttpQueryHeaders recupera información de encabezado asociada a una solicitud HTTP.
Consulta también WinHttpQueryHeadersEx, que ofrece una manera de recuperar cadenas de nombre y valor de encabezado analizados.
Sintaxis
WINHTTPAPI BOOL WinHttpQueryHeaders(
[in] HINTERNET hRequest,
[in] DWORD dwInfoLevel,
[in, optional] LPCWSTR pwszName,
[out] LPVOID lpBuffer,
[in, out] LPDWORD lpdwBufferLength,
[in, out] LPDWORD lpdwIndex
);
Parámetros
[in] hRequest
Identificador de solicitud HINTERNET devuelto por WinHttpOpenRequest. Se debe haber llamado a WinHttpReceiveResponse para este identificador y se ha completado antes de llamar a WinHttpQueryHeaders .
[in] dwInfoLevel
Valor de tipo DWORD que especifica una combinación de marcas de atributo y modificador enumeradas en la página Marcas de información de consulta . Estas marcas de atributo y modificador indican que se solicita la información y cómo se va a dar formato.
[in, optional] pwszName
Puntero a una cadena que contiene el nombre del encabezado. Si la marca de dwInfoLevel no está WINHTTP_QUERY_CUSTOM, establezca este parámetro en WINHTTP_HEADER_NAME_BY_INDEX.
[out] lpBuffer
Puntero al búfer que recibe la información. Establecer este parámetro en WINHTTP_NO_OUTPUT_BUFFER hace que esta función devuelva FALSE. La llamada a GetLastError devuelve ERROR_INSUFFICIENT_BUFFER y lpdwBufferLength contiene el número de bytes necesarios para contener la información solicitada.
[in, out] lpdwBufferLength
Puntero a un valor de tipo DWORD que especifica la longitud del búfer de datos, en bytes. Cuando se devuelve la función, este parámetro contiene el puntero a un valor que especifica la longitud de la información escrita en el búfer. Cuando la función devuelve cadenas, se aplican las reglas siguientes.
- Si la función se realiza correctamente, lpdwBufferLength especifica la longitud de la cadena, en bytes, menos 2 para el valor null de terminación.
- Si se produce un error en la función y se devuelve ERROR_INSUFFICIENT_BUFFER , lpdwBufferLength especifica el número de bytes que la aplicación debe asignar para recibir la cadena.
[in, out] lpdwIndex
Puntero a un índice de encabezado de base cero que se usa para enumerar varios encabezados con el mismo nombre. Al llamar a la función , este parámetro es el índice del encabezado especificado que se va a devolver. Cuando se devuelve la función, este parámetro es el índice del encabezado siguiente. Si no se encuentra el siguiente índice, se devuelve ERROR_WINHTTP_HEADER_NOT_FOUND . Establezca este parámetro en WINHTTP_NO_HEADER_INDEX para especificar que solo se debe devolver la primera aparición de un encabezado.
Valor devuelto
Devuelve TRUE si es correcto o FALSE en caso contrario. Para obtener información de error extendida, llame a GetLastError. Entre los códigos de error devueltos se encuentran los siguientes.
Código de error | Descripción |
---|---|
|
No se pudo encontrar el encabezado solicitado. |
|
No se puede llevar a cabo la operación solicitada porque el controlador suministrado no está en el estado correcto. |
|
El tipo de identificador proporcionado es incorrecto para esta operación. |
|
Se ha producido un error interno. |
|
No había suficiente memoria disponible para completar la operación solicitada. (Código de error de Windows) |
Comentarios
Incluso cuando WinHTTP se usa en modo asincrónico (es decir, cuando se ha establecido WINHTTP_FLAG_ASYNC en WinHttpOpen), esta función funciona de forma sincrónica. El valor devuelto indica éxito o error. Para obtener información de error extendida, llame a GetLastError.
De forma predeterminada , WinHttpQueryHeaders devuelve una cadena. Sin embargo, puede solicitar datos en forma de una estructura SYSTEMTIME o DWORD mediante la inclusión de la marca modificadora adecuada en dwInfoLevel. En la tabla siguiente se muestran los posibles tipos de datos que WinHttpQueryHeaders puede devolver junto con la marca modificadora que se usa para seleccionar ese tipo de datos.
Tipo de datos | Marca modificadora |
---|---|
LPCWSTR | Predeterminada. No se requiere ninguna marca modificadora. |
SYSTEMTIME | WINHTTP_QUERY_FLAG_SYSTEMTIME |
DWORD | WINHTTP_QUERY_FLAG_NUMBER |
Ejemplos
En el ejemplo siguiente se muestra cómo obtener un identificador HINTERNET , abrir una sesión HTTP, crear y enviar un encabezado de solicitud y examinar el encabezado de respuesta devuelto.
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);
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP, Windows 2000 Professional con SP3 [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003, Windows 2000 Server con SP3 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | winhttp.h |
Library | Winhttp.lib |
Archivo DLL | Winhttp.dll |
Redistribuible | WinHTTP 5.0 e Internet Explorer 5.01 o posterior en Windows XP y Windows 2000. |
Consulte también
Acerca de los servicios HTTP de Microsoft Windows (WinHTTP)
Servicios HTTP de Microsoft Windows (WinHTTP)