使用C ++阅读Cookies(客户端)

时间:2011-12-09 00:56:51

标签: c++ cookies client

我对Wininet dll的一些API调用非常困难。我试图读取IE 9设置的cookie客户端。这是代码。

     #include "stdafx.h"
     #include <Windows.h>
    #include <WinInet.h>
    #include <iostream>
    int _tmain(int argc, _TCHAR* argv[])
    {

LPTSTR lpData = NULL;
DWORD dwSz = 500; 
std::cout << "Hello Chris" << std::endl;
lpData = new TCHAR[dwSz];

std::wcout << "Arg 0: " << argv[1] << std::endl;


bool val = InternetGetCookieEx(argv[1], argv[2], lpData, &dwSz,  INTERNET_COOKIE_THIRD_PARTY | INTERNET_FLAG_RESTRICTED_ZONE, NULL);

    if (!val)
    {

        if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
        {
            std::cout << "Insufficent Buffer size" << std::endl;
            lpData = new TCHAR[dwSz];
            val = InternetGetCookieEx(argv[1], argv[2], lpData, &dwSz, INTERNET_COOKIE_THIRD_PARTY | INTERNET_FLAG_RESTRICTED_ZONE, NULL);
            if (val)
            {
                std::cout << "Cookie Data: " << lpData << std::endl;
            }
            else
            {
                std::cout << "ERROR Code: " << GetLastError() << std::endl;
            }
        }
        else 
        {
            int err = GetLastError();
            std::cout << "ERROR Code: " << err << std::endl;
        }
    }
    else
    {
                        std::cout << "Cookie Data: " << lpData << std::endl;
    }
//}


return 0;

}

我遇到的问题是,当我调用InternetGetCookeEx时,我总是返回false并得到错误代码259,这意味着没有更多的数据可用。当你咨询API时,这意味着它无法找到我的cookie。

因为我使用的是IE 9,所以存储cookie的文件的名称明显受损,这就是为什么我试图以这种方式读取我的cookie数据。

我删除了公司名称以保护公司。基本上我想要做的是。找到lUsrCtxPersist cookie值。因此我将代码称为CookieReader.ext http:// [CompanyDomain] .com lUsrCtxPersist。

然而,我总是得到一个假的错误代码为259.你可能会对此有所了解。非常感谢。

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

假设cookie名称正确,请尝试删除INTERNET_COOKIE_THIRD_PARTY和/或INTERNET_FLAG_RESTRICTED_ZONE标记,看看会发生什么。或者尝试调用InternetGetCookie(),而不是没有这样的标志。

另外,当InternetGetCookieEx()返回ERROR_INSUFFICIENT_BUFFER时,您正在泄漏记忆。在调用delete[]以分配新缓冲区之前,您需要new[]现有缓冲区。