【发布时间】:2018-05-07 13:54:58
【问题描述】:
我使用 TIdHTTP 进行网络服务请求,认证后我必须保留会话信息,但 IdCookieManager 似乎总是丢失一个 cookie...
这是我非常简单的sn-p
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),但如果我在 Web 浏览器上执行,则会得到三个 (1P_JAR,NID 和 CONSENT)。
这适用于所有 URL,似乎它总是“丢失”一个 cookie
【问题讨论】:
-
据我所知,如果没有更多详细信息,您无法将 TIdHTTP(单个请求)与浏览器(可能的多个)请求进行比较。
-
我正在尝试使用 TIdHTTP 发送 Web 服务请求。在我这样做之前,我必须登录并使用会话 ID(存储在 cookie 中)来处理以下请求。但是如果 CookieCollection 是空的,我就不能。
-
@MarcoAndreoli 如果可以,您应该添加一些更具体的代码/服务地址。无论如何,您使用的是哪个版本的 delphi/indy?
-
上面的代码是一个例子,每个网站的CookieCollection 都有一个cookie。我使用 delphi 2007 和 Indy 10.6.2.0
-
你试过用 Postman 代替浏览器吗?
标签: delphi indy shiro delphi-2007 indy10