TNetHTTPClient 清除 cookie

TNetHTTPClient clear cookies

我在 Delphi 10.2.3 Firemonkey 项目中使用 TNetHTTPClient,我想清除所有存储的 cookie。我在帮助文件中没有找到任何解决方案。我试过这段代码,但我得到的错误是数组是只读的:

SetLength(NetHTTPClient1.CookieManager.Cookies, 0);

如何清除所有 cookie,而不破坏 TNetHTTPClient 的实例并重新创建它?

只是一个想法:

for i := 0 to High(NetHTTPClient1.CookieManager.Cookies)
  do NetHTTPClient1.CookieManager.Cookies[i].Expires := Now - 1;

NetHTTPClient1.CookieManager.dCookies;

这样您就可以将所有cookies设置为过期。 再次获取 cookies 调用 GetCookies 内部调用 DeleteExpiredCookies

编辑

不幸的是,这不起作用(阅读下面的评论了解详情)

我明白了,非常感谢 中的 BigBother 和 Toon Krijthe 关于 class 帮助者!

由于 CookieManager.Cookies 是只读的,我试图通过 class 帮助程序访问私有字段 TCookies,但自 10.1 Berlin 起不再有效。然而,Toon Krijthe 找到了一种方法,我根据自己的需要对其进行了调整:

接口:

type
  TCookieManagerHelper = class helper for TCookieManager
    procedure DeleteCookies;
  end;

实施:

procedure TCookieManagerHelper.DeleteCookies;
begin
  with self do
    FCookies.clear;
end;

每当我想清除 cookie 时:

NetHTTPClient1.CookieManager.DeleteCookies;

我必须补充一点,这可能不适用于 Delphi 的未来版本,因为 Embarcadero 故意禁止通过 class 助手访问私有字段。