2012-12-28 58 views
1

最近我發現我收到EConvertError之後致電IDHTTP.GET。 我分析了流量,看到cookie上的過期日期是2000年。現在我的問題是如何繞過這一點。我正在使用XE3中的Indy10。我知道Indy遵循關於cookie處理的嚴格標準,但不應該有一個功能來關閉它?Cookie已過期Indy

網址: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

由於'TIdCustomHTTP.ProcessCookies()','TIdCookieManager.AddServerCookies()'和'TIdCookie.ParseServerCookie()'方法不包含在調用堆棧中,所以違規的日期/時間字符串不是來自cookie的你表現出來。它必須來自'Last-Modified'或'Expires'頭文件(或缺少),因爲那些是'TIdEntityHeaderInfo.ProcessHeaders()'直接調用'GMTToLocalDateTime()'而不檢查空白的唯一頭文件價值第一。 –

+1

因爲'RawStrInternetToDateTime()',因此'GMTToLocalDateTime()'在傳遞空字符串時不會引發異常,所以您必須不使用最新版本的Indy,服務器發送的空白格式錯誤的標頭值。請顯示實際的標題。 –

+0

@RemyLebeau按照你的要求。它是1970年代的問題。 –

回答

1

違規的日期/時間字符串不是從一個cookie的到來,作爲TIdCustomHTTP.ProcessCookies()TIdCookieManager.AddServerCookies()TIdCookie.ParseServerCookie()方法不包含在您展示的調用堆棧中。它實際上是錯誤的Last-Modified標題。 Facebook正在發送ISO 8601格式的日期,HTTP規範不支持該日期。這是Facebook的HTTP服務器中的一個錯誤。他們應該比使用不符合HTTP格式的日期標題更好地瞭解它們。該錯誤需要報告給Facebook,以便他們能夠修復它。同時,我檢查了更新到the latest Indy SVN snapshot,因此TIdHTTP現在可以解析ISO 8601日期。