2013-02-12 132 views
1

尝试使用indy下载文件(发布到asp保存excel响应),但遇到错误,使用wireshark请求缺少cookie。从TWebBrowser获取Cookie

尝试从Twebbrowser窗口抓取cookie并保存。

procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject); 
var 
document: IHTMLDocument2; 
cookies:tstringlist; 
begin 
cookies:=tstringlist.Create; 
document := WebBrowser1.Document as IHTMLDocument2; 
cookies.Add(document.cookie); 
//do stuff with them 
end; 

回报什么,什么来提取一个cookie(或2)出twebbrowser的,或最好的办法是有更好的东西我失踪?

回答

1

由于使用JavaScript和document.cookie属性的恶意软件(ab)的历史记录,Web服务器可能会在HTTP级别上请求cookie仅通过HTTP返回,而不是通过JavaScript提供。

https://www.owasp.org/index.php/HTTPOnly

我不知道这是您的实例的情况下,但你提到你使用印地获取的文件。如果您自己将数据从WebBrowser1中放入WebBrowser1,那么Cookie数据不会被复制,因为它是HTTP事务的属性。见印文件关于cookies:

http://www.indyproject.org/docsite/html/TIdHTTP_CookieManager.html

3

TWebBrowser大约是IE浏览器,这本身就是围绕WinInet的包装的包装。 Indy不与IE/WinInet共享cookie,因此您必须手动将Cookie信息复制到Indy的TIdCookieManager组件中。然而,IHTMLDocument2.cookie属性只是name=value对的分隔字符串(如果它由于安全限制而返回任何内容),它不包含Indy使用的足够信息,例如cookie的源URL和目标域/路径,所以您必须从其他位置获取该信息,例如通过解析存储在Windows的Cookies文件夹中的IE cookie文件。

+0

这里有一个URL,我发现了一些代码,显示如何加载'wininet.dll'并调用它的'InternetGetCookieExA'方法,它检索'HTMLOnly' Cookie。 (http://portal.clevercomponents.com/KB/a74/copy-twebbrowser-cookies-to-tclhttp.aspx) – 2017-01-04 04:46:22