2012-12-28 2 views
1

최근에 나는 을 IDHTTP.GET (으)로 호출 한 후 EConvertError가 발생하는 것으로 확인했습니다. 나는 트래픽을 분석하고 쿠키의 만료 날짜가 2000이라고 보았습니다. 이제 제 질문은이를 우회하는 방법입니다. XE3에있는 Indy10을 사용하고 있습니다. Indy가 쿠키 처리에 대한 엄격한 표준을 따르고 있지만 이것을 해제하는 기능이 없어야한다는 것을 알고 있습니까?쿠키가 만료되었습니다 Indy

URL :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()'메소드가 호출 스택에 포함되어 있지 않으므로 잘못된 날짜/시간 문자열이 쿠키에서 오지 않습니다. 당신이 보여 줬어. TIdEntityHeaderInfo.ProcessHeaders()는 공백을 체크하지 않고 직접'GMTToLocalDateTime()'을 호출하는 유일한 헤더이기 때문에'Last-Modified' 또는'Expires' 헤더 (또는 부족)로부터 오는 것이어야합니다. 값을 먼저 지정하십시오. –

+1

'RawStrInternetToDateTime()', 따라서'GMTToLocalDateTime()'은 빈 문자열을 전달할 때 예외를 발생시키지 않으므로 인디의 최신 버전을 사용하면 안됩니다. 빈 형식의 헤더 값이 서버에서 전송 중입니다. 실제 헤더를 표시하십시오. –

+0

@RemyLebeau 요청한대로. 그 1970 년대의 문제. –

답변

1

기분을 상하게 날짜/시간 문자열로, 쿠키에서 오지 않아 TIdCustomHTTP.ProcessCookies(), TIdCookieManager.AddServerCookies()TIdCookie.ParseServerCookie() 메서드는 표시된 호출 스택에 포함되어 있지 않습니다. 사실상 오류가있는 것은 Last-Modified 헤더입니다. Facebook은 HTTP 사양에서 지원하지 않는 ISO 8601 형식의 날짜를 보내고 있습니다. 이것은 Facebook의 HTTP 서버에있는 버그입니다. HTTP 날짜 헤더에 부적합한 형식을 사용하는 것보다 잘 알고 있어야합니다. 그 버그는 페이스 북에보고해야만 고칠 수 있습니다. 그동안 the latest Indy SVN snapshot에 대한 업데이트를 확인 했으므로 TIdHTTP은 ISO 8601 날짜를 구문 분석 할 수 있습니다.