27.10.2021

Первый стабильный релиз утилиты для загрузки web-контента GNU Wget2

После трёх с половиной лет разработки представлен первый стабильный релиз проекта GNU Wget2, развивающего полностью переработанный вариант программы для автоматизации рекурсивной загрузки контента GNU Wget. GNU Wget2 спроектирован и переписан с нуля и примечателен выносом базовой функциональности web-клиента в библиотеку libwget, которая может обособленно применяться в приложениях. Утилита поставляется под лицензией GPLv3+, а библиотека под LGPLv3+.

Вместо постепенной переработки существующей кодовой базы было решено переделать всё с нуля и основать отдельную ветку Wget2 для воплощений идей по реструктуризации, наращивания функциональности и внесения изменений, нарушающих совместимость. За исключением прекращения поддержки протокола FTP и формата WARC, wget2 в большинстве ситуаций может выступать в роли прозрачной замены классической утилиты wget.

При этом wget2 имеет некоторые документированные различия в поведении, предоставляет около 30 дополнительных опций и прекращает поддержку нескольких десятков опций. В том числе прекращена обработка таких опций, как «—ask-password», «—header», «—exclude-directories», «—ftp*», «—warc*», «—limit-rate», «—relative» и «—unlink».

Из ключевых новшеств можно отметить:

  • Вынос функциональности в библиотеку libwget.
  • Переход на многопоточную архитектуру.
  • Возможность параллельной установки нескольких соединений и загрузки в несколько потоков. В том числе возможно распараллеливание загрузки одного файла с разбивкой на блоки при помощи опции «—chunk-size».
  • Поддержка протокола HTTP/2.
  • Использование HTTP-заголовка If-Modified-Since для загрузки только изменившихся данных.
  • Переход на применение внешних ограничителей пропускной способности, таких как trickle.
  • Поддержка заголовка Accept-Encoding, передачи данных в сжатом виде и алгоритмов сжатия brotli, zstd, lzip, gzip, deflate, lzma и bzip2.
  • Поддержка TLS 1.3, протокола OCSP (Online Certificate Status Protocol) для проверки отозванных сертификатов, механизма HSTS (HTTP Strict Transport Security) для принудительного перенаправления на HTTPS и HPKP (HTTP Public Key Pinning) для привязки сертификатов.
  • Возможность использования GnuTLS, WolfSSL и OpenSSL в качестве бэкендов для TLS.
  • Поддержка режима быстрого открытия TCP-соединений (TCP FastOpen).
  • Встроенная поддержка формата Metalink.
  • Поддержка интернационализированных доменных имён (IDNA2008).
  • Возможность одновременно работы через несколько прокси-серверов (один поток будет загружаться через один прокси, в второй через другой).
  • Встроенная поддержка новостных лент в форматах Atom и RSS (например, для сканирования и загрузки ссылок). Данные RSS/Atom могут быть загружены из локального файла или по сети.
  • Поддержка извлечения URL из файлов Sitemap. Наличие парсеров для извлечения ссылок из файлов CSS и XML.
  • Поддержка директивы ‘include’ в файлах конфигурации и распределение настроек по нескольким файлам (/etc/wget/conf.d/*.conf).
  • Встроенный механизм кэширования запросов DNS.
  • Возможность перекодирования содержимого со сменой кодировки документа.
  • Учёт файла «robots.txt» при рекурсивных загрузках.
  • Режим надёжной записи с вызовом fsync() после сохранения данных.
  • Возможность возобновления прерванных TLS-сеансов, а также кэширования и сохранения в файл параметров TLS-сеанса.
  • Режим «—input-file — » для загрузки URL, поступающих через стандартных входной поток.
  • Проверка области действия Cookie по каталогу публичных суффиксов доменов (Public Suffix List) для изоляции друг от друга разных сайтов, размещённых в одном домене второго уровня (например, «a.github.io» и «b.github.io»).
  • Поддержка загрузки потокового вещания в формате ICEcast / SHOUTcast.

Источник.