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
ERROR_WINHTTP_HEADER_NOT_FOUND
Der angeforderte Header konnte nicht gefunden werden.
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
Der angeforderte Vorgang kann nicht ausgeführt werden, da sich der angegebene Handle nicht im richtigen Zustand befindet.
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
Der Typ des angegebenen Handles ist für diesen Vorgang falsch.
ERROR_WINHTTP_INTERNAL_ERROR
Ein interner Fehler ist aufgetreten.
ERROR_NOT_ENOUGH_MEMORY
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
 
Hinweis Informationen zu Windows XP und Windows 2000 finden Sie im Abschnitt Laufzeitanforderungen der WinHttp-Startseite .
 

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)

WinHTTP-Versionen

WinHttpCloseHandle

WinHttpConnect

WinHttpOpen

WinHttpOpenRequest