最近开发需要向网站进行数据抓包等,先用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;
新闻热点
疑难解答
图片精选