Search code examples
winapihttp-headerswinhttp

Win32 WinHttp: Correct way to query custom response header?


I want to query ETag header from response headers (Of course ETag is HTTP standar, but it is not defined as a flag in WinHttpQueryHeaders function). this is Microsoft's example:

HRESULT ReadHeader(
    __in HINTERNET requestHandle, 
    __in_z WCHAR* headerName, 
    __in ULONG queryFlags)
{
    HRESULT hr = NOERROR;
    WCHAR headerBuffer[256];
    ULONG headerLength = sizeof(headerBuffer);

    if (!WinHttpQueryHeaders(
        requestHandle,
        queryFlags,
        NULL,
        headerBuffer,
        &headerLength,
        WINHTTP_NO_HEADER_INDEX))
    {
        hr = HRESULT_FROM_WIN32(GetLastError());
        goto Exit;
    }

    wprintf(L"%s: %s\n", headerName, headerBuffer);

Exit:
    return hr;
}

It can use to query value with flags. But how I can do with ETag? I tried:

WinHttpQueryHeaders(
    requestHandle,
    NULL,
    L"ETag",
    headerBuffer,
    &headerLength,
    WINHTTP_NO_HEADER_INDEX)

with no success.


Solution

  • Pass WinHttpQueryHeaders a dwInfoLevel set to WINHTTP_QUERY_CUSTOM which:

    Causes WinHttpQueryHeaders to search for the header name specified in the pwszName parameter and store the header information in lpBuffer.