WinHttpQueryHeaders-Funktion (winhttp.h)
Die WinHttpQueryHeaders-Funktion ruft Headerinformationen ab, die einer HTTP-Anforderung zugeordnet sind.
Weitere Informationen finden Sie unter WinHttpQueryHeadersEx, das eine Möglichkeit bietet, analysierte Headernamen und Wertzeichenfolgen abzurufen.
Syntax
WINHTTPAPI BOOL WinHttpQueryHeaders(
[in] HINTERNET hRequest,
[in] DWORD dwInfoLevel,
[in, optional] LPCWSTR pwszName,
[out] LPVOID lpBuffer,
[in, out] LPDWORD lpdwBufferLength,
[in, out] LPDWORD lpdwIndex
);
Parameter
[in] hRequest
HINTERNET-Anforderungshandle , das von WinHttpOpenRequest zurückgegeben wird. WinHttpReceiveResponse muss für dieses Handle aufgerufen und abgeschlossen sein, bevor WinHttpQueryHeaders aufgerufen wird.
[in] dwInfoLevel
Wert des Typs DWORD , der eine Kombination aus Attribut- und Modifiziererflags angibt, die auf der Seite Abfrageinformationsflags aufgeführt sind. Diese Attribut- und Modifiziererflags geben an, dass die Informationen angefordert werden und wie sie formatiert werden sollen.
[in, optional] pwszName
Zeiger auf eine Zeichenfolge, die den Headernamen enthält. Wenn das Flag in dwInfoLevel nicht WINHTTP_QUERY_CUSTOM ist, legen Sie diesen Parameter auf WINHTTP_HEADER_NAME_BY_INDEX fest.
[out] lpBuffer
Zeiger auf den Puffer, der die Informationen empfängt. Wenn Sie diesen Parameter auf WINHTTP_NO_OUTPUT_BUFFER festlegen, gibt diese Funktion FALSE zurück. Beim Aufrufen von GetLastError wird dann ERROR_INSUFFICIENT_BUFFER zurückgegeben, und lpdwBufferLength enthält die Anzahl der Bytes, die zum Aufnehmen der angeforderten Informationen erforderlich sind.
[in, out] lpdwBufferLength
Zeiger auf einen Wert vom Typ DWORD , der die Länge des Datenpuffers in Bytes angibt. Wenn die Funktion zurückgibt, enthält dieser Parameter den Zeiger auf einen Wert, der die Länge der in den Puffer geschriebenen Informationen angibt. Wenn die Funktion Zeichenfolgen zurückgibt, gelten die folgenden Regeln.
- Wenn die Funktion erfolgreich ist, gibt lpdwBufferLength die Länge der Zeichenfolge in Bytes an, minus 2 für den beendenden NULL-Wert.
- Wenn die Funktion fehlschlägt und ERROR_INSUFFICIENT_BUFFER zurückgegeben wird, gibt lpdwBufferLength die Anzahl von Bytes an, die die Anwendung zuweisen muss, um die Zeichenfolge zu empfangen.
[in, out] lpdwIndex
Zeiger auf einen nullbasierten Headerindex, der zum Auflisten mehrerer Header mit demselben Namen verwendet wird. Beim Aufrufen der Funktion ist dieser Parameter der Index des angegebenen Headers, der zurückgegeben werden soll. Wenn die Funktion zurückgibt, ist dieser Parameter der Index des nächsten Headers. Wenn der nächste Index nicht gefunden werden kann, wird ERROR_WINHTTP_HEADER_NOT_FOUND zurückgegeben. Legen Sie diesen Parameter auf WINHTTP_NO_HEADER_INDEX fest, um anzugeben, dass nur das erste Vorkommen eines Headers zurückgegeben werden soll.
Rückgabewert
Gibt TRUE zurück, wenn der Vorgang erfolgreich war, oder andernfalls FALSE . Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf. Zu den zurückgegebenen Fehlercodes gehören die folgenden.
Fehlercode | BESCHREIBUNG |
---|---|
|
Der angeforderte Header konnte nicht gefunden werden. |
|
Der angeforderte Vorgang kann nicht ausgeführt werden, da sich der angegebene Handle nicht im richtigen Zustand befindet. |
|
Der Typ des angegebenen Handles ist für diesen Vorgang falsch. |
|
Ein interner Fehler ist aufgetreten. |
|
Für den angeforderten Vorgang war nicht genügend Arbeitsspeicher verfügbar. (Windows-Fehlercode) |
Hinweise
Auch wenn WinHTTP im asynchronen Modus verwendet wird (d. h. wenn WINHTTP_FLAG_ASYNC in WinHttpOpen festgelegt wurde), arbeitet diese Funktion synchron. Der Rückgabewert weist auf Erfolg oder Fehler hin. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.
Standardmäßig gibt WinHttpQueryHeaders eine Zeichenfolge zurück. Sie können Jedoch Daten in Form einer SYSTEMTIME-Struktur oder DWORD anfordern, indem Sie das entsprechende Modifiziererflag in dwInfoLevel einschließen. Die folgende Tabelle zeigt die möglichen Datentypen, die WinHttpQueryHeaders zurückgeben kann, zusammen mit dem Modifiziererflag, das Sie zum Auswählen dieses Datentyps verwenden.
Datentyp | Modifiziererflag |
---|---|
LPCWSTR | Standard. Kein Modifiziererflag erforderlich. |
SYSTEMTIME | WINHTTP_QUERY_FLAG_SYSTEMTIME |
DWORD | WINHTTP_QUERY_FLAG_NUMBER |
Beispiele
Das folgende Beispiel zeigt, wie Sie ein HINTERNET-Handle abrufen, eine HTTP-Sitzung öffnen, einen Anforderungsheader erstellen und senden und den zurückgegebenen Antwortheader untersuchen.
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);
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP, Windows 2000 Professional mit SP3 [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003, Windows 2000 Server mit SP3 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | winhttp.h |
Bibliothek | Winhttp.lib |
DLL | Winhttp.dll |
Verteilbare Komponente | WinHTTP 5.0 und Internet Explorer 5.01 oder höher unter Windows XP und Windows 2000. |
Weitere Informationen
Informationen zu Microsoft Windows HTTP-Diensten (WinHTTP)
Microsoft Windows HTTP-Dienste (WinHTTP)