首页 > 编程 > Delphi > 正文

delphi 将webbrowser的cookie给idhttp用

2019-11-08 02:06:38
字体:
来源:转载
供稿:网友

      最近开发需要向网站进行数据抓包等,先用webbrowser请求网页,获取元素取值后再用idhttp向网页进行get操作。因为涉及到验签、登录等,一直不成功,后来用网络数据抓包工具发现在用webbrowser和IDhttp请求时数据相同,只是cookie不同。

1、数据抓包设置cookie: Set-Cookie: JsessionID=4nLLYm1XrVtMWJL5VvG2y13RyXJbvhv2kth3SJ5hGpbL7Jv4ZTQk!1183038173!NONE; path=/; HttpOnly

2、webbrowser请求时的Cookie: JSESSIONID=QTnTYq6QyCvCBdyhtBRLP4K4WLzxGQ2LCSbDSNBF8zKDPqt1WMDJ!1003383531!-543092864; http:xxxxxxx=3071348908.44105.0000

3、idhttp请求时的Cookie:  http:xxxxxxx=3071348908.44105.0000。

       原来(CookieWEB.document as ihtmldocument2).cookie是无法获取webbrowser的所有cookie的,需要借助"'wininet.dll"才能获取完整的cookie,然后赋值给idhttp就可以成功了。

function GetCookie(url: string): string;const  INTERNET_COOKIE_HTTPONLY     = $00002000;  INTERNET_COOKIE_THIRD_PARTY  = $00000010;  INTERNET_FLAG_RESTRICTED_ZONE= $00020000;var  hModule:THandle;  InternetGetCookieEx:function(lpszUrl, lpszCookieName,lpszCookieData: PChar; var lpdwSize: DWord;dwFlags:DWORD;lPReserved: Pointer): BOOL;StdCall;  CookieSize:DWORD;  cookiedata:PWideChar;  thebool:bool;begin  result := '';  hModule:=GetModuleHandle('wininet.dll');  if hModule<>0 then  begin    @InternetGetCookieEx:=GetProcAddress(hModule,'InternetGetCookieExW');    if @InternetGetCookieEx<>nil then    begin      CookieSize:=10240;      Cookiedata := AllocMem(CookieSize);      thebool:=InternetGetCookieEx(PWideChar(url),nil,CookieData,CookieSize,INTERNET_COOKIE_HTTPONLY,nil);      if thebool then result := CookieData;      FreeMem(Cookiedata);    end;    FreeLibrary(hModule);  end;end;


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选