После трёх с половиной лет разработки представлен первый стабильный релиз проекта 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.