【问题标题】:Can't get cookies from Indy TIdCookieManager无法从 Indy TIdCookieManager 获取 cookie
【发布时间】:2018-12-19 09:26:54
【问题描述】:

我有 Indy 10.6、Windows 10 和 Delphi XE7。

在响应 HTTPS GET 请求时,CookieManager 声明没有 cookie,但 HTTP 分析器显示有:

HTTP/1.1 200 OK
Date: Wed, 11 Jul 2018 10:47:22 GMT
Server: Apache
Cache-Control: no-cache
Pragma: No-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
X-Frame-Options: DENY
Set-Cookie: JSESSIONID=vqf9bFgB0wp1vyznZTQ2TLGzpQbpYQTgnwqhtvQpl2D0JdsrpH8G!-32035106!wls-baap401.test.vocalink.co.uk!13129!13109; path=/; HttpOnly
Content-Type: text/xml; charset=UTF-8
Content-Length: 162

我的代码是:

html := IdHTTP1.Get(Login);

Cookies := IdCookieManager1.CookieCollection.LockCookieList(caRead);
  try
    for I := 0 to Cookies.Count-1 do
    begin
      Cookie := Cookies[I];
      // save Cookie as needed...
    end;
  finally
    IdCookieManager1.CookieCollection.UnlockCookieList(caRead);
  end;

但是Cookies.Count 是 0。

有什么想法吗?

【问题讨论】:

    标签: delphi cookies indy delphi-xe7 indy10


    【解决方案1】:

    谢谢。我已经按照建议更改了代码,它更干净并且显然有效。在我开始这个项目之前,我没有意识到可以有多个 cookie!

    html := IdHTTP1.get(login);
    
    cookies := IdHTTP1.CookieManager.CookieCollection.LockCookieList(caRead);
    try
      for J := 0 to cookies.count - 1 do
      begin
        cookie := cookies[J];
        // save Cookie as needed...
        CookieValue := cookie.CookieText;
      end;
    finally
      IdHTTP1.CookieManager.CookieCollection.UnlockCookieList(caRead);
    end ;
    

    问候,伊恩

    【讨论】:

      【解决方案2】:

      已排序。作为 Indy 的新手,我忘记将 cookie 管理器连接到 idHTTP ! 现在代码可以正常工作了。

      【讨论】:

      • 仅供参考,您可以在循环代码中将 IdCookieManager1 替换为 IdHTTP1.CookieManager,然后您可以选择从项目中删除 IdCookieManager1,因为 TIdHTTP 在内部创建自己的 CookieManager不要明确分配一个,AllowCookies 是真的。
      猜你喜欢
      • 2021-05-18
      • 2021-05-07
      • 1970-01-01
      • 2021-10-12
      • 2014-05-09
      • 2012-08-10
      • 2023-02-14
      • 2013-01-01
      • 2020-07-19
      相关资源
      最近更新 更多