indy的会话cookie
我必须浏览某个网站,该网站使用indy的idhttp保留会话ID。indy的会话cookie
我使用下面的代码初始化我需要的组件。
procedure InitSession;
begin
Initalized := True;
try
ihttp := TIdHTTP.Create(nil); //the variables are declared globally
idCookie := TIdCookieManager.Create(nil);
ihttp.ConnectTimeout := 5000;
ihttp.AllowCookies := true;
ihttp.HandleRedirects := true;
ihttp.CookieManager := idCookie;
except
Initalized := False;
end;
end;
问题是,当我提出请求的cookie不发送。我需要做什么才能发送cookie巫婆包含会话ID。谢谢
如果一个cookie没有被发送回新的请求,那么任何一个TIdCookieManager
都会在收到cookie时拒绝cookie,或者不会将接受的cookie与新请求匹配。您能否显示发送cookie的实际Set-Cookie
响应标题,以及您认为cookie未被正确发回的URL?您是否在收到Cookie后验证其是否在发送新请求之前实际结束于TIdCookieManager
?
您使用哪个版本的Indy?在2011年之前,Indy 10的早期版本确实破坏了基本上无法使用的cookie处理。但在2011年初,IdCookieManager.pas
和IdCookie.pas
完全重新编写,自2011年5月起开始正常工作,我还没有看到任何新的cookie处理不当的报告。
我正在使用Delphi XE 2 ...所以当我使用ihttp.Get()方法时,Cookie应该自动发送还是我必须手动设置? Cookie在Cookie管理器中正确收到。我该怎么做,谢谢? – opc0de 2012-01-28 11:44:18
我试了这个ihttp.Request.CustomHeaders.Add('Cookie:'+ idcookie.CookieCollection.Cookies [0] .ClientCookie); 但没有成功 – opc0de 2012-01-28 13:21:07
Cookie自动处理。同样,服务器的“Set-Cookie”头看起来像是在接收cookie?您可以从'TIdHTTP.Response.RawHeaders'属性中获取该值。您之后请求的是不是将Cookie发送回去的URL?我需要这些信息来确定Indy是否正确运行,或者这是否是重新设计的Cookie管理代码中的错误。 – 2012-01-29 23:09:42
对于没有DOMAIN属性的cookie有问题吗? DXE2附带的IdCookie无法解析没有MAX-AGE属性的Cookie,请确保具有EXPIRES属性,并且没有DOMAIN属性。请参阅IdCookie.pas 675,其中S似乎具有意想不到的值(从解析expires属性留下)。
您需要指定您正在使用的Indy版本,因为功能在版本之间发生了变化(有时是显着的)。因此,如何做事情也会发生巨大变化。 – 2012-01-28 00:47:51
我建议尝试Subversion的当前Indy版本或每日快照 – mjn 2012-01-29 13:55:09