尝试使用indy下载文件(发布到asp保存excel响应),但遇到错误,使用wireshark请求缺少cookies。
试图从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)的最好方法是什么,还是我遗漏了一些更好的东西?
发布于 2013-02-12 18:47:58
TWebBrowser是Internet Explorer的包装器,而is本身也是WinInet的包装器。Indy不与IE/WinInet共享cookie,因此您必须手动将cookie详细信息复制到Indy的TIdCookieManager组件中。但是,IHTMLDocument2.cookie属性只是name=value对的分隔字符串(如果它返回任何内容,由于安全限制),它不包含足够的信息供Indy使用,例如Cookie源URL和目标域/路径,因此您必须从其他地方获取该信息,例如通过解析存储在Windows的Cookies文件夹中的IE cookie文件。
发布于 2013-02-12 18:46:02
由于使用JavaScript和document.cookie属性的恶意软件(Ab)的历史记录,web服务器可能会在HTTP级请求仅通过HTTP返回cookie,而不是通过JavaScript。
https://www.owasp.org/index.php/HTTPOnly
我不确定在您的实例中是否存在这种情况,但是您提到您使用Indy来获取文件。如果您自己将其中的数据放入WebBrowser1中,那么不复制cookie数据是有意义的,因为它是HTTP事务的属性。请参阅有关cookies的Indy文档:
http://www.indyproject.org/docsite/html/TIdHTTP_CookieManager.html
https://stackoverflow.com/questions/14826727
复制相似问题