我对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.你可能会对此有所了解。非常感谢。
答案 0 :(得分:3)
http://msdn.microsoft.com/en-us/library/ms537312%28v=vs.85%29.aspx
尝试使用IEGetProtectedModeCookie
答案 1 :(得分:1)
假设cookie名称正确,请尝试删除INTERNET_COOKIE_THIRD_PARTY
和/或INTERNET_FLAG_RESTRICTED_ZONE
标记,看看会发生什么。或者尝试调用InternetGetCookie()
,而不是没有这样的标志。
另外,当InternetGetCookieEx()
返回ERROR_INSUFFICIENT_BUFFER
时,您正在泄漏记忆。在调用delete[]
以分配新缓冲区之前,您需要new[]
现有缓冲区。