Недавно я обнаружил, что получаю EConvertError после вызова IDHTTP.GET. Я проанализировал трафик и увидел, что срок действия куки - 2000. Теперь мой вопрос, как это обойти. Я использую Indy10, который присутствует в XE3. Я знаю, что Indy придерживается строгих стандартов в отношении обработки файлов cookie, но разве не должна быть функция, позволяющая отключить это?
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
TIdCustomHTTP.ProcessCookies()
,TIdCookieManager.AddServerCookies()
иTIdCookie.ParseServerCookie()
не включены в показанный стек вызовов. Он должен исходить из заголовкаLast-Modified
илиExpires
(или из отсутствия), так как это единственные заголовки, для которыхTIdEntityHeaderInfo.ProcessHeaders()
напрямую вызываетGMTToLocalDateTime()
без предварительной проверки пустых значений. - person Remy Lebeau   schedule 28.12.2012RawStrInternetToDateTime()
и, следовательно,GMTToLocalDateTime()
не вызывают исключения при передаче пустой строки, поэтому сервер должен отправлять непустое искаженное значение заголовка. . Пожалуйста, покажите настоящие заголовки. - person Remy Lebeau   schedule 28.12.2012Last-Modified
. Он не использует поддерживаемый строковый формат, соответствующий определениюHTTP-date
в RFC 2616, раздел 3.3 и используется RFC 2616, раздел 14.29. Это ошибка в HTTP-сервере Facebook. Они должны были знать лучше, чем использовать этот нестандартный формат для заголовка даты HTTP. Об этой ошибке необходимо сообщить в Facebook. так что они могут это исправить. - person Remy Lebeau   schedule 28.12.2012TIdHTTP
теперь может анализировать даты ISO 8601. - person Remy Lebeau   schedule 29.12.2012