Проверьте MD5 заголовка файла, размещенного на веб-сервере

Проверьте MD5 заголовка файла, размещенного на веб-сервере

Я пишу скрипт bash для периодической загрузки файла настройки с помощью cURL. Проблема в следующем: файл весит около 110 МБ и всегда имеет одно и то же имя.

Я могу загрузить файл, проверить его хэш (md5, sha1) и сравнить его с ранее загруженным файлом:

  • если хэш равен, то файл тот же самый и не был обновлен: в этом случае я скачал его зря.
  • если хэш отличается, то файл на веб-сервере представляет собой новую версию: в этом случае я использую этот файл и обновляю его до новой версии.

Я хотел бы запускать этот скрипт каждые полчаса, и загрузка 110 МБ впустую (одной и той же версии файла) меня смущает.Есть ли способ загрузить первые 500 КБ с помощью curl в командной строке?

Мой текущий обходной путь — сравнить размер файла из заголовка HTTP, но я все равно хотел бы получить ответ на вопрос выше и узнать, осуществимо ли это. Большое спасибо.

curl -sI 'http://domain.tld/uri/updater/getLatest.etcenter?c=var&asi=allright' -H 'Хост: domain.tld' -H 'Пользовательский агент: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) как Gecko' -H 'Принять: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8' -H 'Принять язык: en-US,en;q=0.5' -H 'Принять кодировку: gzip, deflate, br' -H 'DNT: 1' -H 'Соединение: keep-alive' | grep 'Длина содержимого:'

решение1

Можете ли вы доверять датам изменения вашего файла как на клиенте, так и на сервере? Если да, то вы можете использовать функционал HTTP "conditional GET"/"If-Modified-Since" с опцией curl's -z. Не нужно ничего загружать. Это встроенный функционал протокола HTTP, который активно использовался везде с самого начала.

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

Для вашего bashскрипта рассмотрите возможность использования stat(1)для поиска времени модификации локального файла, чтобы вы могли передать эту информацию в curl -z ….

Связанный контент