IdHTTP 和 IdCookieManager 丢失一个 cookie
IdHTTP and IdCookieManager miss one cookie
我使用 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 ).
这是给所有人的 URL,好像 "loses" 总是一个 cookie
您正在尝试将单个 GET 请求响应与浏览器响应进行比较。这不是一回事。
如果您使用例如Postman 你会得到完全相同的结果(www.google.com 有 2 个 cookie)。
我认为如果您可以控制服务服务器端,则应该修改它;如果不能,则应以不同的方式使用它。
我使用 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 ).
这是给所有人的 URL,好像 "loses" 总是一个 cookie
您正在尝试将单个 GET 请求响应与浏览器响应进行比较。这不是一回事。
如果您使用例如Postman 你会得到完全相同的结果(www.google.com 有 2 个 cookie)。
我认为如果您可以控制服务服务器端,则应该修改它;如果不能,则应以不同的方式使用它。