Delphi 从TWebBrowser那里得到饼干

Delphi 从TWebBrowser那里得到饼干,delphi,indy,twebbrowser,Delphi,Indy,Twebbrowser,尝试使用indy下载文件(post to asp保存excel响应),但使用wireshark时遇到错误,请求缺少cookie 试图从Twebbrowser窗口抓取饼干并保存它 procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject); var document: IHTMLDocument2; cookies:tstringlist; begin cookies:=tstringlist.Create; document :=

尝试使用indy下载文件(post to asp保存excel响应),但使用wireshark时遇到错误,请求缺少cookie

试图从Twebbrowser窗口抓取饼干并保存它

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)的最佳方法是什么,或者我缺少更好的内容吗?

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

我不确定您的实例中是否存在这种情况,但您提到您使用Indy获取文件。如果您自己将cookie中的数据放入WebBrowser1,就可以理解cookie数据不会被复制,因为它是HTTP事务的一个属性。请参阅关于Cookie的Indy文档:


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

我不确定您的实例中是否存在这种情况,但您提到您使用Indy获取文件。如果您自己将cookie中的数据放入WebBrowser1,就可以理解cookie数据不会被复制,因为它是HTTP事务的一个属性。请参阅关于Cookie的Indy文档:


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

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

这里有一个URL,我在其中找到了一些代码,显示了如何加载
wininet.dll
并调用其
internetgetCookieeExa
方法,该方法可以检索
HTMLOnly
Cookies。()这里有一个URL,我在其中找到了一些代码,显示了如何加载
wininet.dll
并调用其
internetgetCookieeExa
方法,该方法确实检索
HTMLOnly
cookies。()