Po trzech i pół roku rozwoju zaprezentowano pierwszą stabilną wersję projektu GNU Wget2, w ramach której opracowano całkowicie przeprojektowaną wersję programu do automatyzacji rekurencyjnego pobierania zawartości GNU Wget. GNU Wget2 został zaprojektowany i napisany od podstaw i wyróżnia się przeniesieniem podstawowej funkcjonalności klienta sieciowego do biblioteki libwget, której można używać oddzielnie w aplikacjach. Narzędzie jest licencjonowane na licencji GPLv3+, a biblioteka na licencji LGPLv3+.
Zamiast stopniowo przerabiać istniejącą bazę kodu, zdecydowano się zrobić wszystko od nowa i utworzyć oddzielną gałąź Wget2, aby wdrożyć pomysły na restrukturyzację, zwiększenie funkcjonalności i wprowadzenie zmian psujących kompatybilność. Z wyjątkiem wycofywania protokołu FTP i formatu WARC, wget2 może w większości sytuacji działać jako przezroczysty zamiennik klasycznego narzędzia wget.
Biorąc to pod uwagę, wget2 ma pewne udokumentowane różnice w zachowaniu, zapewnia około 30 dodatkowych opcji i przestaje obsługiwać kilkadziesiąt opcji. Uwzględniono przetwarzanie takich opcji jak „-ask-password”, „-header”, „-exclude-directories”, „-ftp*”, „-warc*”, „-limit-rate”, „-relative”. zatrzymany” i „--unlink”.
Kluczowe innowacje obejmują:
- Przeniesienie funkcjonalności do biblioteki libwget.
- Przejście na architekturę wielowątkową.
- Możliwość ustanawiania wielu połączeń równolegle i pobierania do wielu wątków. Możliwe jest również równoległe pobieranie jednego pliku podzielonego na bloki przy użyciu opcji „-chunk-size”.
- Obsługa protokołu HTTP/2.
- Użyj nagłówka HTTP If-Modified-Since, aby pobrać tylko zmodyfikowane dane.
- Przełącz się na korzystanie z zewnętrznych ograniczników przepustowości, takich jak strumień.
- Obsługa nagłówka Accept-Encoding, transferu skompresowanych danych oraz algorytmów kompresji brotli, zstd, lzip, gzip, deflate, lzma i bzip2.
- Obsługa protokołu TLS 1.3, OCSP (Online Certyfikat Status Protocol) do sprawdzania unieważnionych certyfikatów, mechanizmu HSTS (HTTP Strict Transport Security) do wymuszania przekierowania do HTTPS i HPKP (HTTP Public Key Pinning) do powiązania certyfikatu.
- Możliwość wykorzystania GnuTLS, WolfSSL i OpenSSL jako backendów dla TLS.
- Obsługa szybkiego otwierania połączeń TCP (TCP FastOpen).
- Wbudowana obsługa formatu Metalink.
- Obsługa międzynarodowych nazw domen (IDNA2008).
- Możliwość jednoczesnej pracy przez kilka serwerów proxy (jeden strumień będzie ładowany przez jeden serwer proxy, a drugi przez inny).
- Wbudowana obsługa kanałów informacyjnych w formatach Atom i RSS (na przykład do skanowania i pobierania linków). Dane RSS/Atom można pobrać z pliku lokalnego lub przez sieć.
- Obsługa wyodrębniania adresów URL z map witryn. Dostępność parserów do wyodrębniania linków z plików CSS i XML.
- Obsługa dyrektywy „include” w plikach konfiguracyjnych i dystrybucja ustawień w kilku plikach (/etc/wget/conf.d/*.conf).
- Wbudowany mechanizm buforowania zapytań DNS.
- Możliwość przekodowania treści poprzez zmianę kodowania dokumentu.
- Rozliczanie pliku „robots.txt” podczas pobierania rekurencyjnego.
- Niezawodny tryb zapisu z wywołaniem fsync() po zapisaniu danych.
- Możliwość wznawiania przerwanych sesji TLS, a także buforowania i zapisywania parametrów sesji TLS do pliku.
- Tryb „--input-file-” do ładowania adresów URL przychodzących przez standardowy strumień wejściowy.
- Sprawdzanie zakresu pliku cookie w odniesieniu do katalogu sufiksów domeny publicznej (Lista sufiksów publicznych) w celu odizolowania od siebie różnych witryn hostowanych w tej samej domenie drugiego poziomu (na przykład „a.github.io” i „b.github. io”).
- Obsługuje pobieranie transmisji strumieniowej ICEcast/SHOUTcast.
Źródło: opennet.ru