Как получить mtime удаленного файла перед его загрузкой в ​​Ruby? - PullRequest
4 голосов
/ 02 октября 2009

У меня есть код ниже, который просто загружает файл и сохраняет его. Я хочу запускать его каждые 30 секунд и проверять, изменился ли mtime удаленного файла, и загрузить его, если он изменился. Я буду создавать поток, который будет спать 30 секунд после каждой итерации бесконечного цикла для этой цели, но; как проверить mtime удаленного файла, не загружая его?

Net::HTTP.start($xmlServerHostname) { |http|
                resp = http.get($xmlServerPath+"levels.xml")
                open("levels.xml", "w") { |file|
                    file.write(resp.body)
                }
            }

Ответы [ 2 ]

8 голосов
/ 02 октября 2009

Перед тем, как сделать http.get, выполните http.head , который запрашивает только заголовки без загрузки тела (то есть содержимого файла), затем проверьте, изменилось ли значение заголовка Last Modified.

, например

resp = http.head(($xmlServerPath+"levels.xml")
last_modified = resp['last-modified']
if last_modified != previous_last_modified
  # file has changed
end
3 голосов
/ 02 октября 2009

Вы можете попытаться отправить заголовок If-Modified-Since с правильно отформатированной датой.

Если сервер поддерживает его, он может ответить только с 304 Не изменено статусом (без содержимого) или полным содержимым, если файл был изменен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...