从TWebBrowser获取Cookie

时间:2013-02-12 06:27:10

标签: delphi indy twebbrowser

尝试使用indy下载文件,(发布到asp保存excel响应)但遇到错误,使用wireshark请求缺少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;

什么都不返回,最好的方法是从twebbrowser中提取cookie(或2),还是有更好的东西我不知道?

2 个答案:

答案 0 :(得分:3)

TWebBrowser是Internet Explorer的包装器,它本身就是WinInet的包装器。 Indy不与IE / WinInet共享cookie,因此您必须手动将cookie详细信息复制到Indy的TIdCookieManager组件中。但是,IHTMLDocument2.cookie属性只是name=value对的分隔字符串(如果由于安全限制它会返回任何内容),它不包含足够的信息供Indy使用,例如cookie的来源URL和目标域/路径,因此您必须从其他地方获取该信息,例如通过解析存储在Windows“Cookies文件夹中的IE的cookie文件。

答案 1 :(得分:1)

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

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

我不确定你的实例是这种情况,但你提到你使用Indy来获取文件。如果您自己将数据放入WebBrowser1,那么cookie数据不会被复制,因为它是HTTP事务的属性。请参阅有关cookie的Indy文档:

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