Después de tres años y medio de desarrollo, se presenta la primera versión estable del proyecto GNU Wget2, que desarrolla una versión completamente reestructurada del programa para la automatización de descargas recursivas de contenido GNU Wget. GNU Wget2 está diseñado y reescrito desde cero y se destaca por la extracción de la funcionalidad básica del cliente web a la biblioteca libwget, que puede ser utilizada de forma independiente en aplicaciones. La utilidad se distribuye bajo la licencia GPLv3+, y la biblioteca bajo LGPLv3+.
En lugar de una reestructuración gradual de la base de código existente, se decidió rehacer todo desde cero y establecer una rama separada de Wget2 para llevar a cabo ideas de reestructuración, aumento de funcionalidad y cambios que infrinjan la compatibilidad. A excepción de la descontinuación del soporte para el protocolo FTP y el formato WARC, wget2 puede actuar como un reemplazo transparente de la clásica utilidad wget en la mayoría de las situaciones.
Sin embargo, wget2 presenta algunas diferencias documentadas en su comportamiento, ofrece alrededor de 30 opciones adicionales y descontinúa el soporte para varias docenas de opciones. Entre ellas, se ha dejado de lado el manejo de opciones como «--ask-password», «--header», «--exclude-directories», «--ftp*», «--warc*», «--limit-rate», «--relative» y «--unlink».
Las principales novedades incluyen:
- Extracción de funcionalidad a la biblioteca libwget.
- Transición a una arquitectura multihilo.
- Posibilidad de establecer múltiples conexiones y descargas en paralelo. También se puede paralelizar la descarga de un solo archivo dividiéndolo en bloques utilizando la opción «--chunk-size».
- Soporte para el protocolo HTTP/2.
- Uso del encabezado HTTP If-Modified-Since para descargar solo los datos que han cambiado.
- Transición al uso de limitadores de ancho de banda externos, como trickle.
- Soporte para el encabezado Accept-Encoding, la transmisión de datos en forma comprimida y algoritmos de compresión brotli, zstd, lzip, gzip, deflate, lzma y bzip2.
- Soporte para TLS 1.3, el protocolo OCSP (Online Certificate Status Protocol) para verificar certificados revocados, el mecanismo HSTS (HTTP Strict Transport Security) para redirigir forzosamente a HTTPS y HPKP (HTTP Public Key Pinning) para vincular certificados.
- Posibilidad de usar GnuTLS, WolfSSL y OpenSSL como backends para TLS.
- Soporte para el modo de apertura rápida de conexiones TCP (TCP FastOpen).
- Soporte integrado para el formato Metalink.
- Soporte para nombres internacionalizados de nombres de dominio (IDNA2008).
- Posibilidad de trabajar simultáneamente a través de múltiples proxies-servidores (un flujo se cargará a través de un proxy, el segundo a través de otro).
- Soporte incorporado para feeds de noticias en formatos Atom y RSS (por ejemplo, para escanear y cargar enlaces). Los datos RSS/Atom pueden ser cargados desde un archivo local o a través de la red.
- Soporte para la extracción de URL desde archivos Sitemap. Disponibilidad de analizadores para extraer enlaces de archivos CSS y XML.
- Soporte para la directiva ‘include’ en archivos de configuración y distribución de ajustes en varios archivos (/etc/wget/conf.d/*.conf).
- Mecanismo incorporado de caché para consultas DNS.
- Capacidad para recodificar el contenido con cambio de codificación del documento.
- Consideración del archivo ‘robots.txt’ durante descargas recursivas.
- Modo de escritura fiable con llamada a fsync() después de guardar datos.
- Capacidad para reanudar sesiones TLS interrumpidas, así como para almacenar en caché y guardar en archivo los parámetros de sesión TLS.
- Modo ‘—input-file —’ para cargar URL que llegan a través del flujo de entrada estándar.
- Verificación del alcance de las cookies según el catálogo de sufijos públicos de dominio (Public Suffix List) para aislar diferentes sitios alojados en un mismo dominio de segundo nivel (por ejemplo, ‘a.github.io’ y ‘b.github.io’).
- Soporte para la descarga de transmisiones en formato ICEcast/SHOUTcast.
Fuente: opennet.ru
