怎么使用InternetGetCookieEx函数,wininet里没找到它

k39k39 2012-06-12 11:25:24
因为要获取httponly的cookies,查资料只有这个函数能在IE7以上获取,但delphi的wininet里没有定义它,请问如何使用这个函数?

是自己在wininet.pas里加上?那么如何确认wininet.dll版本支持这个函数?
...全文
1027 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liqiao_2010 2013-05-21
  • 打赏
  • 举报
回复
里面还有个InternetGetCookieExW函数,在C#里可以取值,但在delphi下返回false,求大神指点。
liqiao_2010 2013-05-21
  • 打赏
  • 举报
回复
经测试,取不出httponly的
k39k39 2012-06-12
  • 打赏
  • 举报
回复
那么我如何判断 当前系统是否支持这个函数呢?
一如当初 2012-06-12
  • 打赏
  • 举报
回复
自己定义一下啊,函数原型
http://msdn.microsoft.com/en-us/library/aa384714(VS.85).aspx
一如当初 2012-06-12
  • 打赏
  • 举报
回复
已测,通过

procedure TForm1.Button1Click(Sender: TObject);
const
INTERNET_COOKIE_HTTPONLY = 8192;
var
hModule: THandle;
lp: Pointer;
InternetGetCookieEx: function(lpszUrl, lpszCookieName, lpszCookieData
: PAnsiChar; var lpdwSize: DWORD; dwFlags: DWORD; lpReserved: pointer)
: BOOL; stdCall;
CookieSize: DWORD;
CookieData: PAnsiChar;
begin
LoadLibrary('wininet.dll');
hModule := GetModuleHandle('wininet.dll');
if hModule <> 0 then
begin
@InternetGetCookieEx := GetProcAddress(hModule, 'InternetGetCookieExA');
if @InternetGetCookieEx <> nil then
begin
CookieSize := 1024;
Cookiedata := AllocMem(CookieSize);
if InternetGetCookieEx('http://www.baidu.com', nil, Cookiedata, CookieSize, INTERNET_COOKIE_HTTPONLY, nil) then
Memo1.lines.Append(cookiedata);
FreeMem(Cookiedata);
end;
end;
end;
k39k39 2012-06-12
  • 打赏
  • 举报
回复
终于可以用了,但 InternetGetCookieEx 取得的COOKIES仍然不完整,例如 DZX论坛的类似这项“oPdn_2132_auth”就取不到。

只是比InternetGetCookie 稍好一些

唉,真是痛苦
k39k39 2012-06-12
  • 打赏
  • 举报
回复


procedure TFRM_base64.Button46Click(Sender: TObject);
const
INTERNET_COOKIE_HTTPONLY = 8192 ;
var
hModule:THandle;
lp:pointer;
InternetGetCookieEx:function(lpszUrl, lpszCookieName,lpszCookieData: PChar; var lpdwSize: DWORD;dwFlags:DWORD;lpReserved: Pointer): BOOL;StdCall;
CookieSize:DWORD;
cookiedata:string;
thebool:bool;
begin
hModule:=GetModuleHandle('wininet.dll');
if hModule<>0 then
begin

@InternetGetCookieEx:=GetProcAddress(hModule,'InternetGetCookieExA');
memo4.lines.Append('have func');
if @InternetGetCookieEx<>nil then
begin


CookieSize:=1024;
Setlength(CookieData,CookieSize);
memo4.lines.Append('cookies:');

thebool:=InternetGetCookieEx(PAnsiChar(trim(memo1.Text)),nil,PAnsiChar(CookieData),CookieSize,INTERNET_COOKIE_HTTPONLY,nil);
if thebool then
memo4.lines.Append(CookieData);



end;
end;

end;



我的IE是IE9,以上代码 InternetGetCookieEx 返回FALSE ,无法获取cookies。
一如当初 2012-06-12
  • 打赏
  • 举报
回复
上面的网址说明了,要求系统XP或Server 2003以上,我觉得你根本不用担心这个问题了
如果你非要去判断,这样吧
var
Version: Extended;
begin
Version := StrtoFloat(Format('%d.%d', [Win32MajorVersion, Win32MinorVersion]));
// 大于等于 5.1 就是XP以上系统了
if Version >= 5.1 then
……
end;

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧