Как выполнить действие при изменении удаленного (Http) файла? - PullRequest
4 голосов
/ 28 мая 2010

Я хочу создать скрипт, который проверяет URL-адрес и выполняет действие (загрузка + распаковка), когда заголовок «Last-Modified» удаленного файла изменился. Я думал о получении заголовка с помощью curl, но затем я должен сохранить его где-то для каждого файла и выполнить сравнение дат.

У кого-нибудь есть другая идея использовать (в основном) стандартные инструменты Unix?

спасибо

Ответы [ 2 ]

8 голосов
/ 28 мая 2010

Возможное решение - периодически запускать этот алгоритм на клиентском компьютере.

  1. Создайте HTTP-запрос с указанием заголовка If-Modified-Since, равного дате вашего локального файла. Если файл еще не существует, не включайте этот заголовок;
  2. Сервер отправит вам файл, если он был изменен с заголовка If-Modified-Since в полезной нагрузке, или отправит 304 Not Modified статус HTTP.
  3. Если вы получаете 200 OK статус HTTP, просто получите полезную нагрузку из тела HTTP и разархивируйте файл.
  4. Если в другой руке вы получили 304 Not Modified, вы знаете, что ваш файл обновлен.
  5. Используйте заголовок Last-Modified, чтобы коснуться вашего локального файла. Таким образом, вы будете синхронизированы с сервером datetime.

Другим способом было бы отправлять уведомления серверу (например, широковещательный пакет) при изменении файла. Когда уведомление получено, клиент затем выполняет вышеуказанный алгоритм. Это подразумевало бы наличие кода на HTTP-сервере, который прослушивает изменения файловой системы и затем передает их заинтересованным сторонам.

Возможно, эта информация для curl команды имеет какое-то значение:

УСЛОВИЯ ВРЕМЕНИ

HTTP позволяет клиенту указывать время условие для документа это Запросы. Это если модифицирован-с или Если-Unmodified-С. Скручиваемость позволяет укажите их с помощью -z / - time-cond флаг.

Например, вы можете легко сделать загрузка, которая выполняется только если удаленный файл новее локального копия. Это будет сделано как:

curl -z local.html http://remote.server.com/remote.html

Или вы можете скачать файл, только если локальный файл новее удаленного один. Сделайте это, предварительно указав дату строка с '-', как в:

curl -z -local.html http://remote.server.com/remote.html

Вы можете указать дату «произвольного текста» как состояние. Скажите локон только для скачивания файл, если он был обновлен с Вчера:

curl -z вчера http://remote.server.com/remote.html

Curl тогда примет широкий диапазон форматы даты. Вы всегда делаете дату проверить наоборот добавление к тире '-'. добавление к тире '-'.

Для подведения итогов вам понадобится:

1 голос
/ 28 мая 2010

применима ли Java в вашем случае? Я проделал аналогичную работу в одном из моих домашних заданий, используя библиотеку Apache HTTPcore, вам нужно добавить заголовок «If-Modified-Since» к вашему HTTP-запросу, прежде чем отправить его на сервер, если код состояния ответа, который вы Прием от сервера не равен 304, тогда вы знаете, что файл изменился со времени, с которым вы проверяете.

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