尝试使用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),还是有更好的东西我不知道?
答案 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