@amirkhonov

Как скачивать только измененный файл с curl или wget?

Здравствуйте!
Мне нужно скачивать архивы из репозитория (например, https://downloads.wordpress.org/plugin/disable-com... только тогда, когда файл на сервере имеет другой размер (Content-Length). Скрипт написан на Python.

downloads.wordpress.org отдает все необходимые данные, чтобы узнать когда был изменен файл и о его размере:
Status: HTTP/1.1 200 OK
Server:	nginx	
Date:	Mon, 15 Aug 2016 06:30:46 GMT	
Content-Type:	application/zip	
Content-Length:	80828	
Connection:	close	
Cache-control:	private	
Content-Disposition:	attachment; filename=disable-comments.zip	
Last-Modified:	Fri, 12 Aug 2016 09:46:22 GMT	
X-Frame-Options:	SAMEORIGIN	
X-nc:	BYPASS lax 189	
Accept-Ranges:	bytes


Пробовал wget, aria2c, curl с помощью библиотеки os питона:
1. Wget и aria2c не получают файл/игнорирует его, т.к. такой файл уже есть в локальном каталоге. (юзаю ключ -N для wget)
2. C curl вообще не получается у меня. Она тупо скачиват файл и переписывает (curl url --output /folder/1.zip).

Мне кажется, я неправильно пользуюсь возможностями данных утилит. Можно ли реализовать такую задачу с помощью библиотек python без вызова os?

Прошу помочь разобраться с этим. Спасибо заранее.

P.S. Хотелось бы решить проблему с wget,curl, чтобы они не скачивали актуальный файл на локалке.
  • Вопрос задан
  • 597 просмотров
Решения вопроса 1
1nn0
@1nn0
Системный администратор\Фрилансер
Ну вариантов много.
Что касается Python, то вот примерный алгоритм для решения вашей задачи:
1) Берем модуль requests (для простоты)
2) запрашиваем через него заголовки для вашего файла (r = requests.head('example.com'))
3) Сравниваем content-length с размером вашего файла
4) Если отличается, скачиваем файл
5) ...
6) Profit

P.S.: Wget и Curl тоже поддерживают получение только хедеров
для wget - это параметр "--server-response"
для curl - это параметр '-head'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы