Рубріки: Теория

Wget — загрузка по требованию

Сергій Бондаренко

Загрузка данных по сети — операция тривиальная и часто востребованная. Если вы работаете под Windows, то наверняка используете «качалку» вроде Download Master или GetRight. Но для платформы Linux выбор невелик. Да и требования к качалке должны быть несколько иные, например, она должна поддерживать командную строку. К счастью, практически во все дистрибутивы GNU/Linux включена утилита, которая называется Wget. В этой статье мы рассмотрим возможности этого приложения и расскажем о том, как с ним работать.

Содержание:
1. Возможности утилиты Wget
2. Примеры использования: синтаксис командной строки
3. Альтернатива Wget

1. Возможности утилиты Wget

Практически в любом современном браузере есть встроенный модуль для загрузки файлов. Однако его возможности, как правило, очень скромны — например, нет возможности ограничения скорости загрузки, отсутствуют опции выбора загружаемых файлов по маске. К тому же стандартная «качалка» мало пригодна для пакетного копирования файлов, загрузить весь сайт целиком для нее — большая проблема.

Менеджер загрузки Wget обладает полным набором необходимых инструментов и опций для загрузки файлов. Он оптимизирован для работы с консолью управляется командной строкой и удобен для автоматизации самых различных задач.

Среди его возможностей:

  • Загрузка любых файлов, включая (X)HTML-страницы.
  • Он может продолжать прерванные загрузки используя опции протокола REST и RANGE.
  • Возможность применения подстановочных знаков имен файлов и рекурсивное отзеркаливание каталогов.
  • При необходимости программа преобразует абсолютные ссылки в загруженных документах в относительные, чтобы загруженные документы могли ссылаться друг на друга локально.
  • При загрузке по FTP программа может копировать файлы «по маске» имени.
  • Wget умеет загружать файлы, используя пакетный список из составленных ссылок.
  • Программа может работать в большинстве UNIX-подобных операционных систем.
  • Утилита работает с HTTP-прокси-серверами.
  • Имеет поддержку HTTP-cookies.
  • Поддержка работы в автоматическом или фоновом режимах.
  • Может работать с постоянными HTTP-соединениями.
  • Умеет читать временные метки локальных файлов, также определяет по ним нужно ли повторно загружать документы при зеркалировании.

Большинство функций приложения полностью настраиваются, либо с помощью параметров командной строки, либо с помощью файла инициализации wgetrc.

Существует также обновленная версия Wget2 не распространяется по дефолту в большинстве дистрибутивов, которая отличается от стандартной первой несколькими дополнительными опциями.

Так, в частности, она уже поддерживает HTTP/2, работает с HTTP-сжатием, умеет устанавливать параллельные соединения качать в несколько потоков. Также она работает с расширением для ускорения открытия последовательного протокола управления передачей (TCP) между двумя конечными точками.

2. Примеры использования: синтаксис командной строки

Перейдем к примерам использования Wget при помощи командной строки.

Установка приложения

В большинстве дистрибутивов GNU/Linux это приложение уже включено. Однако его можно и установить самостоятельно.
Инсталляция в Ubuntu и Debian одинакова:

$ sudo apt install wget

Для установки на CentOS и Fedora используйте $ sudo yum install wget.

Скачивание файла

Самая простая функция приложения — обычная загрузка файла. Для скачивания файла применяйте следующую конструкцию:

$ wget https://wordpress.org/latest.zip

В процессе копирования данных с помощью Wget в консоли отображается индикатор хода выполнения задачи, а также имя передаваемого файла, его объем, скорость загрузки и расчетное время необходимое для завершения загрузки.

После завершения процесса копирования файла вы можете найти сохраненные данные в своем текущем рабочем каталоге. Чтобы указать иное месторасположение при загрузке, следует использовать ключ -P, например

$ wget https://wordpress.org/latest.zip -P /home/serge

сохранит файл в папку home/serge.

В тех случаях, когда необходимо изменить имя записываемого файла, следует использовать параметр -O:

$ wget -O wordpress.zip https://wordpress.org/latest.zip

Скачивание данных в фоновом режиме

Загрузка файла может быть выполнена в фоновом режиме:

$ wget -b https://distro.ibiblio.org/puppylinux/puppy-fossa/fossapup64-9.5.iso

Пакетная загрузка данных

Пакетная загрузка файлов — это одна из самых удобных функций Wget. Чтобы воспользоваться ею, следует создать текстовый файл, в котором будет содержаться список ссылок загружаемых файлов. Далее используем следующий синтаксис:

$ wget –I links_file.txt

При запуске с таким параметром загрузка будет осуществляться по одному файлу из списка.

Указание числа попыток соединения

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

В параметрах Wget можно указать число попыток, которое будет совершено, прежде чем утилита откажется от загрузки. Для этого используется параметр --tries. Например, следующая команда говорит о том, что будет предпринято 80 попыток:

$ wget ––tries=80 https://distro.ibiblio.org/puppylinux/puppy-fossa/fossapup64-9.5.iso

Контроль скорости загрузки

В отличие от большинства встроенных в браузер менеджеров загрузки в Wget можно контролировать скорость загрузки данных. Делается это с помощью параметра --limit-rate=. Например, строка вида

$ wget --limit-rate=500k https://dl-cdn.alpinelinux.org/alpine/v3.15/releases/x86/alpine-virt-3.15.0-x86.iso

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

Загрузка по FTP

Загрузка по протоколу FTP в программе Wget может выполняться как в анонимном режиме, так и с авторизацией пользователя. По умолчанию пассивный вариант с загрузкой выглядит так:

$ wget ftp://ftp.mgts.by/debian-cd/11.1.0-live/amd64/iso-hybrid/debian-live-11.1.0-amd64-cinnamon.iso

Способ с авторизацией по логину и паролю:

$ wget ftp://login:password@ftp.example.org/some_file.iso

Также возможна альтернативная запись этой команды:

$ wget --ftp-user=login –ftp-password=********* ftp_link

Возобновление загрузки

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

$ wget –c https://dl-cdn.alpinelinux.org/alpine/v3.15/releases/x86/alpine-virt-3.15.0-x86.iso

Если данную опцию не использовать, загрузка начнется с начала.

Загрузка сайта целиком на локальный диск

В отличие от большинства менеджеров загрузки Wget умеет создавать копию сайта на локальном диске:

$ wget --mirror -p --convert-links -P /home/serge url_site.com

При использовании опции -p выполняется копирование всех файлов, которые нужны для корректного отображения HTML-страниц, а параметр --convert-links позволяет преобразовать ссылки в загружаемых файлах, чтобы они нормально отображались на локальной версии сайта.

Управление рекурсией загрузки сайта целиком

В тех случаях, когда необходимо скачивать сайт целиком с указанием глубины рекурсии, следует применять команду с параметром -r, --recursive:

wget -r -l 10 -k -o log-file.txt -p http://example.org/
  1. -l, --level=ЧИСЛО число, определяющее глубину рекурсии если указать inf или 0 — глубина трассировки сайта берется как бесконечность.
  2. -k, --convert-links конвертирование ссылок в загруженном HTML или CSS на локальные.
  3. -o, --output-file=ФАЙЛ запись логов в файл.
  4. -p, --page-requisites параметр включающий загрузку всех ресурсов картинки и пр., которые требуются для корректного отображения HTML-страницы.
  5. -m, --mirror укороченный параметр, аналогичный -N -r -l inf --no-remove-listing.

Отключение проверки сертификата

Когда вам необходимо загрузить файл через HTTPS с хоста с нерабочим (неактуальным) сертификатом SSL, задействуйте опцию --no-check-certificate:

$ wget --no-check-certificate https://domain-with-invalid-ss.com

Подмена агента при блокировке

Бывает ситуация, когда загрузка файла через Wget прерывается удаленным хостом, который блокирует агента пользователя. В этом случае можно включить эмуляцию альтернативного браузера и подменить заголовок в запросе. Для этой цели используется параметр -U.

$ wget --user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" http://wget-forbidden.com/

3. Альтернатива Wget

Альтернатив Wget в Linux не так и много. Пожалуй, один из лучших вариантов — Aria2 (https://github.com/aria2/aria2), бесплатная программа для скачивания файлов по сети и управляемая командной строкой.

Она выполняет загрузку данных по HTTP-, HTTPS-, FTP-протоколам. Также она может работать как клиент сети BitTorrent. Используя контрольные суммы блока данных для Metalink, Aria2 автоматически проверяет части данных во время загрузки файла.

Управлять утилитой Aria2 можно удаленно — через HTTP по протоколам JSON-RPC и XML-RPC. Также возможен интерфейс JSON-RPC через WebSocket. Из прочих утилит можно выделить менеджер uGet есть версия и под Android, а также написанная на Python HTTPie. Последняя объединяет возможности Wget и утилиты Curl.

Функционал Wget можно найти и в других проектах. В отличие от оригинального Wget это клоны, которые лишь имитируют некоторые возможности клиента. Так, например, схожий инструмент есть в арсенале сборки OpenWrt и в наборе UNIX-утилит командной строки BusyBox (https://busybox.net/).

Если же возникает необходимость использования графического интерфейса, можно установить менеджер загрузок Gwget. По сути это оболочка для программы Wget, работающая для GNOME 2. Она поддерживает все функции оригинального приложения, такие как возобновление загрузки, рекурсивное скачивание и загрузку по FTP, а также отображает сообщения в области уведомлений и поддерживает перетаскивание (drag-and-drop) файлов в окне программы.


В заключение предлагаем подробное обучающее видео по теме Wget для тех, кто жаждет практики:

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023