Cookie已过期Indy

时间:2012-12-28 00:41:26

标签: delphi delphi-xe2 indy10 delphi-xe3

最近我发现在调用 IDHTTP.GET 后我收到 EConvertError 。 我分析了流量,看到cookie上的过期日期是2000.现在我的问题是如何绕过这个。我正在使用XE3中的Indy10。我知道Indy遵循严格的cookie处理标准,但不应该有一个功能来关闭它吗?

网址 https://graph.facebook.com/me?access_token=ACCESS_TOKEN

堆栈跟踪:

:75a5c41f KERNELBASE.RaiseException + 0x58
System.SysUtils.ConvertErrorFmt($412994,(...))
System.SysUtils.StrToInt('')
IdGlobal.IndyStrToInt('')
IdGlobalProtocols.RawStrInternetToDateTime('',0)
IdGlobalProtocols.GMTToLocalDateTime('')
IdHTTPHeaderInfo.TIdEntityHeaderInfo.ProcessHeaders
IdHTTPHeaderInfo.TIdResponseHeaderInfo.ProcessHeaders
IdHTTP.TIdHTTPProtocol.RetrieveHeaders(???)

响应标题:

(Status-Line)   HTTP/1.1 200 OK
Access-Control-Allow-Origin *
Cache-Control   private, no-cache, no-store, must-revalidate
Content-Type    text/javascript; charset=UTF-8
ETag    "676c539ac3cd7161f5492ce95d72d8b620c6fa6c"
Expires Sat, 01 Jan 2000 00:00:00 GMT
Last-Modified   2012-12-20T20:08:20+0000
P3P CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"
Pragma  no-cache
X-FB-Rev    702819
X-UA-Compatible IE=edge,chrome=1
Set-Cookie  m_ts=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.facebook.com; httponly
Set-Cookie  reg_ext_ref=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.facebook.com
Set-Cookie  reg_fb_gate=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.facebook.com
Set-Cookie  reg_fb_ref=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.facebook.com
X-FB-Debug  kZmwuLCRhfhJBKfLoQEbTOBJNyKQGUKLEeJ2R2rcxXg=
Date    Fri, 28 Dec 2012 10:02:19 GMT
Connection  keep-alive
Content-Length  1932

1 个答案:

答案 0 :(得分:1)

违规日期/时间字符串不是来自Cookie,因为TIdCustomHTTP.ProcessCookies()TIdCookieManager.AddServerCookies()TIdCookie.ParseServerCookie()方法未包含在您显示的调用堆栈中。它实际上是Last-Modified标题有问题。 Facebook正在发送ISO 8601格式的日期,HTTP规范不支持该日期。这是Facebook的HTTP服务器中的一个错误。他们应该知道比使用不符合格式的HTTP日期标题更好。该bug需要报告给Facebook,以便他们可以修复它。在此期间,我检查了the latest Indy SVN snapshot的更新,因此TIdHTTP现在可以解析ISO 8601日期。