wget è un’utilità basata su riga di comando che aiuta ad effettuare il download di file dal Web utilizzando i protocolli HTTP, HTTPS e FTP. È ampiamente utilizzata nei sistemi Linux e macOS per scaricare file o intere pagine Web ma funziona senza problemi anche in ambiente Windows.
L’utilità offre diverse opzioni e funzionalità per gestire i download in modo flessibile. Il browser Web, infatti, non è notoriamente il migliore strumento per effettuare il download di file e pagine Web. Generalmente non è possibile, ad esempio, sospendere lo scaricamento dei file per poi riprenderlo successivamente e quando supportata, questa caratteristica non funziona bene.
Uno strumento come wget, invece, oltre alla possibilità di mettere in pausa il download, supporta anche lo scaricamento dei file in modo ricorsivo: così è possibile addirittura richiedere il prelievo delle pagine Web e delle risorse collegate con una stessa pagina. Virtualmente con un livello di profondità infinito.
Le principali funzionalità di wget
Oltre al già citato download ricorsivo, wget è in grado di gestire autenticazioni, connessioni cifrate e altre funzionalità specifiche dei protocolli. L’utilità, come accennato nell’introduzione, può riprendere il download dal punto in cui è stato interrotto, risparmiando tempo e banda di rete.
A proposito di larghezza di banda, wget offre la possibilità di impostare dei limiti consentendo di controllare la velocità di download ed evitando, allo stesso tempo, di creare situazioni di congestione.
Tra le opzioni di wget, citiamo la possibilità di personalizzare le modalità di gestione dei download, di specificare header personalizzati, definire i tempi di attesa, limitare la profondità di download e altro ancora.
Differenze tra wget e curl
Ci siamo già soffermati sulle potenzialità e sull’uso di curl, un’altra popolare utilità per scambiare dati in rete. Rispetto a curl, wget integra alcune differenze significative nelle funzionalità e modalità di utilizzo.
In generale, wget è progettato principalmente per il download di file, pagine Web ed elementi che le compongono. curl, viceversa, è un potente strumento per il trasferimento dati che supporta non solo il download di file, ma anche il loro upload, l’invio di richieste HTTP, FTP, HTTPS, FTPS, il supporto di proxy, l’autenticazione, l’invio di dati con vari metodi (POST, PUT,…) e altre funzionalità avanzate.
Mentre da un lato wget supporta solamente HTTP, HTTPS e FTP, curl estende il suo “raggio d’azione” ai seguenti protocolli: HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, LDAP, DICT, POP3, IMAP, SMTP, RTMP e molti altri.
In generale, se si desidera semplicemente scaricare file da Internet, Wget è spesso la scelta più semplice e diretta. Tuttavia, se si hanno esigenze più complesse, come l’invio di richieste personalizzate o l’utilizzo di protocolli diversi, curl offre un set più ampio di funzionalità. Entrambi gli strumenti sono estremamente utili e possono comunque essere utilizzati assieme per sfruttarne al massimo le caratteristiche specifiche.
Come configurare wget in Windows
Sebbene wget sia nata come utilità destinata alle piattaforme Unix-like, le potenti funzionalità che essa mette a disposizione sono fruibili allo stesso modo anche dai sistemi Windows. Il consiglio è quello di effettuare il download di wget per Windows nella versione più aggiornata riponendo attenzione alla versione (per sistemi a 64 bit o x64, a 32 bit o x86, ARM64).
Il programma si compone di un unico file eseguibile da salvare in una cartella di appoggio, ad esempio c:\wget
. Per impostazione predefinita, però, wget non può essere utilizzato da qualunque cartella sul sistema in uso perché manca la variabile d’ambiente corretta.
Per aggiungerla, basta premere Windows+R
quindi digitare sysdm.cpl ,3
e fare clic sul pulsante Variabili d’ambiente. Cliccando due volte sulla riga Path nel riquadro Variabili dell’utente per…, si deve selezionare Nuovo quindi specificare il percorso c:\wget
, dove si trova l’eseguibile di wget.
Come ultimo passo, è necessario riavviare il sistema affinché le modifiche abbiano effetto.
In alternativa, è possibile configurare wget in Windows in modo molto semplice ricorrendo al software winget
. Si tratta di una comoda utilità da riga di comando Microsoft che permette di installare programmi automaticamente in Windows 10 e 11.
Per scaricare wget e impostare automaticamente la variabile d’ambiente corretta, è sufficiente aprire il prompt dei comandi in Windows 10 e in Windows 11 quindi digitare quanto segue:
winget install wget
Dopo il riavvio di Windows, scrivendo wget --version
in qualunque cartella ci si trovi, si otterrà come risposta il numero di versione dell’utilità.
Come usare wget in Windows
Per scaricare file in Windows basta portarsi in una cartella a propria scelta (suggeriamo di creare una cartella C:\TEMP
da usare per i test) quindi impartire il comando wget
seguito dall’URL della risorsa remota che si desidera prelevare. Indicando, uno dopo l’altro, gli URL delle risorse da scaricare, ne verrà effettuato automaticamente il download. Esempio:
wget <url1> <url2> <url3>
Usando la sintassi seguente, è possibile salvare la risorsa con un nome diverso da quello originale (notare l’utilizzo dell’opzione -O
):
wget -O pagina.html <indirizzo-web>
Con lo switch -c
è eventualmente possibile riprendere un precedente download parziale, non concluso integralmente.
Aggiungendo invece l’opzione -P
, si richiede la memorizzazione dei file in una cartella diversa da quella in cui ci si trova.
Utilizzando la sintassi che segue, si può addirittura fornire a wget un file di testo contenente l’elenco degli URL delle risorse da scaricare:
wget -i url.txt
Ovviamente, ogni URL deve essere specificato all’interno del file di testo utilizzando una riga a sé.
In tutti i casi, negli esempi sin qui presentati come in quelli successivi, gli URL o indirizzi Web devono essere riportati in modo completo (comprensivi di URI, ad esempio le indicazioni HTTPS o HTTP). Diversamente, il comportamento di wget potrebbe non essere, per vari motivi, quello atteso.
Limitare le attività svolte da wget
Come accennato in apertura, wget prevede anche alcune opzioni accessorie che a limitare l’utilizzo della banda di rete. Utilizzando il comando che segue, per esempio, si chiede a wget di non impegnare la banda disponibile per oltre 1 MB/s:
wget --limit-rate=1M <url>
Con l’esempio che segue, invece, si limita wget a non utilizzare la banda disponibile per oltre 200 KB/s:
wget --limit-rate=200K <url>
Va osservato che i valori sono espressi in byte al secondo e non in bit per secondo. In un altro articolo spieghiamo la differenza tra gigabit e gigabyte. Una connessione che offre in condizioni ottimali 100 Mbps di banda in download consente di scaricare 12,5 MB/s (100 Mbps / 8 bit = 12,5 MB/s
), un collegamento da 20 Mbps permette di arrivare al massimo a 2,5 MB/s.
Il valore di 200 KB/s utilizzato nel secondo esempio equivale a 1,6 Mbps di banda (200 KB/s * 8 bit = 1.600 Kbps = 1,6 Mbps
).
Per impostare invece un periodo di pausa dopo ogni download, si può aggiungere l’opzione -w
. Alcuni server impediscono le attività di Web scraping bloccando gli indirizzi IP remoti che provano a scaricare quantità importanti di file in un breve lasso di tempo. Il comando che segue introduce un’attesa di 5 secondi tra un download e quello successivo:
wget -w 5 <url1> <url2>
L’utilità wget permette infine di impostare il numero di tentativi da effettuare al momento del download di qualunque file. Per default, wget prova a scaricare un file il cui download fallisce fino a 20 volte. Con l’utilizzo dello switch -t
si può aumentare o ridurre tale valore:
wget -t 5 <url>
Gestione dei download ricorsivi
wget offre tutto il necessario per scaricare ad esempio una pagina Web e tutte le risorse collegate alla pagina stessa così come alle pagine HTML collegate. Questo approccio si chiama download ricorsivo e può avere una profondità virtualmente illimitata. Di fatto, quindi, wget può trasformarsi in un vero e proprio crawler o spider che un po’ come fa l’analogo componente software di Google o di altri motori di ricerca, può seguire i link presenti in qualsiasi pagina Web.
Da un punto di vista pratico, la maggior parte dei server Web finiscono per bloccare il Web scraping quindi è sempre meglio muoversi con cautela, con wget così come con qualunque altro software simile.
Per impostazione predefinita, il livello di profondità è pari a 5 mentre la sintassi da usare è la seguente:
wget -r <url>
Aggiungendo -l
seguito da un valore, è possibile personalizzare il livello di profondità della scansione Web da parte di wget.
Il fatto è che così facendo non si crea una copia locale completamente navigabile perché i link presenti nelle pagine HTML puntano a risorse remote. Per far sì che wget modifichi gli URL remoti e faccia sempre riferimento alle risorse scaricate in locale, si può aggiungere l’opzione -k
.
Ancora, per scaricare tutto il contenuto di ciascuna pagina, comprese immagini, CSS e altre risorse presenti, basta aggiungere al comando wget anche lo switch -p
.
Richiedere la generazione di un file di log
La sintassi wget -o <logfile> <url>
consente di richiedere all’utilità la creazione di un file di registro che consente di esaminare l’intera attività svolta e, per ciascuna operazione, accertare ad esempio i motivi di un eventuale fallimento.
Problemi con i certificati digitali
Con alcuni siti Web, potrebbero presentarsi problemi nel caricamento del corrispondente certificato digitale, utilizzato insieme con il protocollo HTTPS per stabilire una connessione cifrata tra client e server. In questi casi, indipendentemente dalla tipologia di errore, si può risolvere aggiungendo lo switch --no-check-certificate
al comando wget.
È importante evidenziare che l’utilizzo di questa particolare opzione dovrebbe essere limitata alle sole pagine Web per le quali si nutre fiducia. La presenza di problemi a livello di certificato HTTPS, infatti, è indizio di una scarsa attenzione alla cura del sito Web.