Эта проблема действительно меня озадачивает. Я начну с объяснения того, что я пытаюсь сделать:Устаревший канал Picasa в PHP
На веб-сайте, который я разрабатываю, я хотел бы отображать альбомы с фотографиями, полученными из определенной учетной записи в Picasa. Для этого я использую XML-канал (http://picasaweb.google.com/data/feed/api/user/userID). Я загружаю этот канал с помощью объекта SimpleXMLElement.
Теперь странно, когда я добавляю/удаляю фотографию в/из альбома, изменения требуют определенного времени (обычно несколько минут), чтобы вступить в силу. Объект PHP по-прежнему получает старые данные. Теперь это было бы не так странно, учитывая, что Google может захотеть ограничить количество запросов, однако при загрузке фида в Firefox изменения отображаются немедленно.
Что вызывает эту задержку, и могу ли я что-нибудь с этим сделать? Есть ли разница между FF и PHP при получении фида? Я заметил, что этот вопрос задан a while back, но без каких-либо ответов, и я подумал, что он слишком стар, чтобы его обмануть.
Я попытался использовать файлы file_get_contents и curl, но ни один из них не работает. Видимо проблема не в PHP, так как в другом вопросе использовался C#.
редактировать - вот запрос заголовок из Firefox:
Expires: Fri, 16 Nov 2012 19:22:45 GMT
Date: Fri, 16 Nov 2012 19:22:45 GMT
Cache-Control: private, max-age=0, must-revalidate
Content-Type: application/atom+xml; charset=UTF-8; type=feed
Vary: Accept, X-GData-Authorization, GData-Version, Cookie
GData-Version: 2.0
Etag: W/"DEEBQnk9fyp7ImA9WhNQEEU."
Last-Modified: Fri, 16 Nov 2012 17:24:13 GMT
Content-Encoding: gzip
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
200 OK
и заголовок ответа от завитка:
HTTP/1.1 200 OK
Expires: Fri, 16 Nov 2012 19:30:26 GMT
Date: Fri, 16 Nov 2012 19:30:26 GMT
Cache-Control: private, max-age=0, must-revalidate, no-transform
Set-Cookie: _rtok=lL_1sPFA07ra; Path=/; HttpOnly
Set-Cookie: S=photos_html=jHfi_UGm4xVujZVehiIOpw; Domain=.google.com; Path=/; HttpOnly
Content-Type: application/atom+xml; charset=UTF-8; type=feed
Vary: Accept, X-GData-Authorization, GData-Version, Cookie
GData-Version: 2.0
ETag: W/"DEEBQnk9fyp7ImA9WhNQEEU."
Last-Modified: Fri, 16 Nov 2012 17:24:13 GMT
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Transfer-Encoding: chunked
редактировать 2: Я думаю, что я понял это! По-видимому, фид обновляется каждые несколько минут при просмотре анонимно. Тем не менее, в Firefox был сохранен мой сеанс регистрации в Picasa, поэтому он учитывался как авторизованный запрос. У Chrome не было этого сеанса, и поэтому он не обновлялся мгновенно. Как только я также разрешил Picasa хранить файл cookie в Chrome, он мгновенно обновлялся, а Opera все еще задерживалась. Собираюсь ответить на другой вопрос, если плакат по-прежнему заинтересован.
Спасибо за подсказку в комментариях, это привело меня к обнаружению причины. Если бы вы могли ответить на него, я соглашусь с этим.
Можете ли вы показать заголовки запроса/ответа для запроса PHP и запроса Firefox? Мне любопытно, может ли Picasa внутренне кэширует запрос на основе чего-то в заголовках? –
@cillosis Добавил их в вопрос. Казалось бы, настройка cookie может иметь к этому какое-то отношение? – Bastiaan
Хмм интересно, когда вы посещаете тот же канал из Chrome, данные также устарели. Возможно, какой-то токен установлен в cookie, который позволяет получить доступ к самым последним данным? – Bastiaan