响应cookie(“Set-Cookie”响应 header )可以很好地使用,但是即使使用WinHttpQueryHeaders也无法通过WINHTTP_QUERY_FLAG_REQUEST_HEADERS获得请求cookie(“Cookie”请求 header ):

DWORD size = 0;
BOOL re = WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_COOKIE /*| WINHTTP_QUERY_FLAG_REQUEST_HEADERS*/, nullptr, nullptr, &size, nullptr);
DWORD err = GetLastError(); // re = 0 && err == ERROR_WINHTTP_HEADER_NOT_FOUND

怎么了?

最佳答案

这应该工作:

DWORD lastError;
LPVOID lpBuffer;
DWORD dwSize = 0, dwIndex = 0;

// Call with zero size to get actual size
BOOL res = WinHttpQueryHeaders(hRequest,
        WINHTTP_QUERY_COOKIE,
        WINHTTP_HEADER_NAME_BY_INDEX,
        NULL,
        &dwSize,
        &dwIndex);
lastError = GetLastError();
if (lastError == ERROR_INSUFFICIENT_BUFFER)
{
    lpBuffer = new WCHAR[dwSize/sizeof(WCHAR)];
    WinHttpQueryHeaders(hRequest,
        WINHTTP_QUERY_COOKIE,
        WINHTTP_HEADER_NAME_BY_INDEX,
        lpBuffer,
        &dwSize,
        &dwIndex);

    // convert result to wstring
    std::wstring result(reinterpret_cast<wchar_t*>(lpBuffer),
        dwSize/sizeof(wchar_t));
    std::wcout << L"Result: " << result << endl;
    delete[] lpBuffer;
}

关于c++ - 如何使用winhttp获取请求Cookie?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31759787/

10-14 16:25
查看更多