1

尝试使用 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)的最佳方法是什么,或者我缺少更好的东西吗?

4

2 回答 2

3

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

于 2013-02-12T10:47:57.730 回答
1

由于恶意软件 (ab) 使用 JavaScript 和 document.cookie 属性的历史,网络服务器可能会在 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

于 2013-02-12T10:46:02.353 回答