IdHTTP和IdCookieManager错过了一个cookie

时间:2018-05-07 13:54:58

标签: delphi indy shiro delphi-2007 indy10

我使用TIdHTTP进行Web服务请求,在识别之后我必须保留会话信息,但IdCookieManager似乎总是丢失一个cookie ...

这是我非常简单的代码段

procedure TForm1.Button5Click(Sender: TObject);
var
  i : Integer;
  Cookie : TIdCookies;
begin
  Memo1.Lines.Clear;
  try
    IdHTTP1.AllowCookies := true;
    IdHTTP1.CookieManager := IdCookieManager1;

    IdHTTP1.Get(Edit2.Text);

    if IdCookieManager1.CookieCollection.Count = 0
     then Memo1.Lines.Add('Empty');

    Cookie := IdCookieManager1.CookieCollection;


    for i := 0 to Cookie.Count -1 do
      Memo1.Lines.Add(Cookie.Cookies[i].Domain + ': ' + Cookie.Cookies[i].CookieName +
        '=' + Cookie.Cookies[i].Value);

  except
    on E : Exception do
      Memo1.Lines.Add(E.Message);
  end;
end;

例如,如果我IdHTTP1.Get('www.google.com');,我会得到两个cookie(1P_JAR,NID),但如果我在网络浏览器上执行,则会得到三个(1P_JAR,NID和CONSENT)。

这适用于所有网址,似乎总是“丢失”一个cookie

1 个答案:

答案 0 :(得分:2)

您正在尝试将单个GET请求响应与浏览器响应进行比较。这不是一回事。

如果您使用例如Postman您将获得完全相同的结果(www.google.com的2个Cookie)。

我认为如果你控制它,你应该修改服务服务器端,否则你应该以不同的方式使用它。