cURL e Wget sono due strumenti da riga di comando molto importanti nella programmazione.
- L’URL del client (cURL) è un comando che consente lo scambio di dati tra un dispositivo e un server tramite un terminale. La parte url del nome suggerisce correttamente che il comando è creato per individuare i dati tramite l’URL (Uniform Resource Locator) fornito. Utilizzando questa interfaccia a riga di comando (CLI), un utente specifica un URL del server (la posizione in cui desidera inviare una richiesta) e i dati che desidera inviare a tale URL del server. cURL non comunica solo con i server web. Supporta un’ampia varietà di protocolli, tra cui HTTP, HTTPS, FTP, FTPS, SCP, SFTP e altro.
- Wget (crasi di World Wide Web e della parola get) è un’utility di comando per scaricare file dal web creata dal progetto GNU per recuperare contenuti e file da vari server web che supporta download tramite FTP, SFTP, HTTP e HTTPS. Il comando wget, sebbene simile in qualche modo a cURL, supporta principalmente i protocolli HTTP e FTP.
Entrambi i due tipi di comando consentono di scaricare i file di rete dalla CLI (Command Line Interface) ma mentre cURL utilizza una licenza simile alla licenza MIT ed è un software gratuito e open source, Wget è un’utility GNU che fa riferimento alla GNU General Public License.
In questo articolo gli esperti analizzano i comandi cURL e Wget:
- condividendo alcuni esempi di sintassi
- suggerendo casi d’uso
- evidenziando i vantaggi di ciascuno
cURL e Wget: perché conoscerli e come utilizzarli
La premessa di contesto è che il processo per visualizzare le pagine Web consiste nello scaricare file che un browser interpreta. Da questo punto di vista, l’HTTP è solo un’altra funzione di trasferimento file, come l’FTP. I browser Web, infatti, non sono gli unici strumenti che utilizzano gli HTTP (HyperText Transfer Protocol) per scaricare file. Esistono tool di comando, come cURL e Wget, che possono scaricare risorse come immagini VM, file di configurazione e aggiornamenti, supportando trasferimenti di file simili da server Web o altri sistemi remoti. Questi comandi si trovano principalmente su sistemi Linux, ma gli amministratori di rete possono anche farne uso su Windows e macOS.
Quali sono i vantaggi di utilizzare cURL e Wget
cURL include i seguenti vantaggi:
- Supporta molti protocolli
- Disponibile per molte piattaforme
- Trasferisce i file in modalità up and down
- Supporta le opzioni di compressione
Wget include i seguenti vantaggi:
- Download veloce e affidabile: con Linux Wget è possibile scaricare file molto più velocemente dei browser perché utilizza più connessioni simultanee. Può anche riprendere i download interrotti a causa di problemi di rete.
- Affidabilità: Wget continua in modo affidabile i download parziali dopo interruzioni e disconnessioni di rete durante il download di un file.
- Script e pianificazione: può essere facilmente programmato e usato nei processi cron (quelli in background che eseguono lavori non interattivi – NdR) per i download non presidiati. Ciò consente di automatizzare download in batch di grandi dimensioni che da eseguire manualmente sarebbero estremamente noiosi.
- Download ricorsivo: può scaricare ricorsivamente il contenuto della pagina Web ed eseguire facilmente il mirroring di interi siti Web. Ciò lo rende utile per il backup e l’archiviazione dei siti Web.
- Limitazione della larghezza di banda: consente di limitare l’utilizzo della larghezza di banda dei download, il che è utile quando si vuole evitare di saturare la connessione di rete e causare a tutti un rallentamento dei download.
- Autenticazione: supporta anche l’autenticazione con nome utente e password per scaricare contenuti protetti sul web.
- Personalizzazione: è altamente personalizzabile con molte opzioni disponibili per scenari di utilizzo avanzati che potrebbero non essere possibili con un browser Internet.
cURL: che cos’è e a cosa serve
Il comando URL client (cURL) è flessibile e consente trasferimenti di file da e verso sistemi remoti utilizzando un’ampia varietà di protocolli. Prima di esaminarne la sintassi di base, ecco le indicazioni di installazione.
Installare cURL
Molte distribuzioni Linux vengono fornite già con la preinstallazione di cURL ma, se non è così, basta utilizzare il gestore pacchetti del sistema per aggiungerlo.
Su Red Hat e distribuzioni simili, utilizzare il seguente comando:
dnf install curl
Gli utenti delle distribuzioni derivate da Debian possono eseguire il seguente comando:
apt install curl
La maggior parte dei Mac dispone già di cURL, ma gli utenti possono aggiungerlo o aggiornarlo con Brew digitando il seguente comando:
brew install curl
Gli utenti Windows possono aggiungere cURL ai propri sistemi eseguendo le build, tenendo conto che Windows 10 e 11 includono già cURL. Se cURL non è installato per impostazione predefinita, alcuni potrebbero anche dover aggiungere la libreria libcURL a questi sistemi.
Sintassi di base del cURL
La maggior parte degli utenti della riga di comando ha familiarità con la sintassi di base di cURL.
curl -options /path/to/file
Il protocollo predefinito è HTTP, ma gli utenti possono anche specificare un protocollo.
Scaricare un file utilizzando cURL
Le due opzioni principali per il download di file utilizzando il comando curl sono -o e -O:
- l’opzione -o salva il file in una posizione specificata dagli utenti con un nome determinato
- l’opzione -O salva il file nella posizione attuale utilizzando il nome corrente del file
Ad esempio, supponiamo che un utente desideri scaricare un file denominato project.pdf da un sito Web fittizio chiamato project-products.com. Il PDF è archiviato in una cartella denominata 2023.
curl -O http://projectproducts.com/2023/projects.pdf
CURL scarica il file nella directory di lavoro attuale dell’utente – digita il comando pwd per verificare la posizione – e lo denomina progetti.pdf. Tuttavia, l’utente può rinominare il file durante il trasferimento e inserirlo in una directory specifica utilizzando l’opzione -o.
curl -o /home/utente/goals/new-projects.pdf http://project-products.com/2023/projects.pdf
Probabilmente gli utenti desiderano scaricare più di un file da questo sito. Supponiamo che un utente abbia lo scenario originale ma debba prendere due PDF invece di progetti.pdf.
Il comando potrebbe essere simile al seguente:
curl -O http://project-products.com/2023/projects1.pdf -O http://project-products.com/2023/projects2.pdf
Uno dei punti di forza di cURL è l’ampia varietà di protocolli supportati. L’FTP è più efficiente nel trasferire file di grandi dimensioni, ecco perché alcuni utenti preferiscono utilizzarlo al posto dell’HTTP. Per farlo, basta specificare il protocollo nel percorso con il seguente comando:
curl -u username:password -O ftp://project-products.com/2023/projects.pdf
L’FTP potrebbe richiedere l’autenticazione e, per questo motivo, è si deve usare l’opzione -u per specificare un nome utente e una password riconosciuti dal sistema remoto.
Caricare un file con cURL
Gli utenti possono anche caricare file in una posizione remota con cURL. Ciò potrebbe essere utile con file di registro o altri trasferimenti. L’ opzione -d identifica il trasferimento come trasferimento HTTP POST. Bisogna prima aggiungere il percorso locale al file inviato al server remoto e poi l’indirizzo del server remoto. Il seguente comando invia progetti.pdf alla directory specificata sul server HTTP:
curl -d @projects.pdf http://project-products.com/uploads
Utilizzare la stessa sintassi per un caricamento FTP ma modifica il protocollo, come mostrato qui:
curl -d @projects.pdf ftp://project-products.com/uploads
Opzioni cURL aggiuntive
cURL è uno strumento flessibile che ha molte opzioni per soddisfare le esigenze degli utenti. Tra gli esempi di funzionalità meno comuni si segnala l’opzione –compressed, la quale richiede che il trasferimento venga compresso all’origine e decompresso alla destinazione. Quando la larghezza di banda è limitata questa opzione è la scelta migliore.
L’opzione -C va utilizzata per riprendere un trasferimento di file che è stato interrotto da una rete, da un’interruzione di corrente e via dicendo. Questa opzione, infatti, continua il trasferimento utilizzando il nome del file esistente anziché duplicarlo.
cURL: esempi applicativi
I trasferimenti manuali di file, come quelli descritti sopra, sono sicuramente un’opzione ma bisogna immaginare tutto il potenziale di aggiungere il comando cURL a uno script.
Ad esempio, si prenda il caso di un processo di sviluppo orchestrato che include build notturne automatizzate presso la sede centrale che devono essere trasferite in uffici remoti. Uno script basato su comandi curl potrebbe semplificare questo processo. Un altro caso d’uso riguarda le immagini VM che devono essere distribuite ad altri siti. O anche i server remoti devono trasferire file di registro o altri dati in un repository di archiviazione centrale presso la sede centrale. cURL è un’opzione anche per questi scenari.
Cos’è Wget?
L’utility Wget ha uno scopo più specifico rispetto a cURL, in quanto pensato per scaricare file da server web utilizzando i protocolli più comuni: HTTP, HTTPS, FTP e FTPS. Usando Wget gli utenti possono recuperare singoli file, gruppi di file o persino archivi tar.
Installare Wget
È meno probabile che Wget sia preinstallato su un sistema Linux rispetto a cURL. Nemmeno Windows e macOS lo includono per impostazione predefinita. È facile aggiungere Wget a queste e ad altre piattaforme. Su un computer Linux, utilizzare il gestore pacchetti del sistema per aggiungere Wget.
Su Red Hat e distribuzioni simili, utilizzare il seguente comando:
dnf install wget
Gli utenti delle distribuzioni derivate da Debian possono invece digitare il seguente comando:
apt install wget
Aggiungere o aggiornare Wget su un Mac utilizzando Brew digitando quanto segue:
brew install wget
Gli utenti Windows scaricano il file eseguibile Wget (wget.exe). Per eseguire l’applicazione, tuttavia, bisogna posizionare Wget in una cartella a scelta e aggiungerla alla variabile di ambiente PATH. Un’altra alternativa è inserirlo nella directory C:\Windows\System32, sebbene questa non sia considerata una procedura consigliabile.
Sintassi di base del comando Wget
Iniziamo con il semplice obiettivo di scaricare un file da un sito Web, magari l’ultima versione di un’applicazione, un’immagine VM, un Dockerfile, un file di configurazione o un archivio. Attualmente, molti fornitori rendono disponibile la versione più recente dei loro prodotti tramite un semplice download lungo un percorso coerente. La sintassi è la seguente:
command -options path
Un download di base da un sito fittizio è simile al seguente:
wget http://project-products.com/2023/projects.pdf
Wget scarica il PDF nella directory corrente.
Per impostazione predefinita, Wget estrae i file dall’URL specifico e li inserisce nella directory di lavoro corrente. Gli utenti possono specificare una posizione di destinazione diversa utilizzando l’opzione -P seguita dalla cartella in cui archiviare il file scaricato. Ad esempio, per recuperare un file da un sito e inserirlo nella directory /projects/updates, digitare quanto segue:
wget -P /projects/updates http://project-products.com/2023/projects.pdf
Questa opzione semplifica il monitoraggio del contenuto dei file recuperati quando i fornitori utilizzano nomi generici, come lastest.doc o current.zip, per le loro risorse.
Una funzionalità Wget particolarmente utile è la possibilità di specificare più siti di destinazione in un file di testo. Wget può quindi elaborare il file e acquisire le risorse da ciascun sito. Utilizzare l’opzione -i per designare il file di input.
Il contenuto del file di testo retrieve-resources.txt potrebbe essere simile al seguente:
Utilizzare il comando seguente per fare riferimento al file e scaricare le risorse specificate:
wget -i retrieve-resources.txt
Usare Wget con FTP
Sebbene il protocollo presupposto sia HTTP o HTTPS, gli utenti possono specificare FTP per connettersi ai server FTP per il download dei file. Ricordiamo che l’FTP richiede una sorta di autenticazione, quindi gli utenti devono fornire un nome utente e una password riconosciuti dal server FTP remoto, come mostrato qui:
wget –ftp-user=NOME –ftp-password=PASSWORD ftp://project-products/2023/projects.pdf
Fare attenzione a inserire informazioni sensibili di autenticazione in un file di testo. È bene prestare attenzione alle opzioni prima di chiamare i download FTP nei file di testo utilizzando l’opzione -i menzionata sopra.
Uno dei punti di forza di Wget è la sua potenza e flessibilità nel recuperare file in modo ricorsivo dal server web di origine. Ha molte opzioni e combinazioni di bandiere. Il comando ricorsivo di base -r è riportato di seguito: supponiamo che la directory 2023 contenga molti file:
wget -r http://project-products.com/2023/
Probabilmente gli utenti vorranno aggiungere l’opzione -np, altrimenti Wget scaricherà la directory principale e i suoi contenuti. Modificare il comando precedente nel seguente:
wget -np -r http://project-products.com/2023/
Esistono opzioni aggiuntive per specificare il livello di recupero ricorsivo o il numero di sottodirectory da recuperare. Altri flag consentono agli utenti di escludere i file che non desiderano scaricare.
Opzioni Wget aggiuntive
Gli utenti potrebbero trovare utili le seguenti opzioni aggiuntive in casi specifici. Gli esperti consigliano di impostare il trasferimento file Wget in modo che venga eseguito in background utilizzando l’opzione -b. Se si tratta di un download che richiede molto tempo, è opportuno controllare il file di registro con il secondo comando mostrato di seguito:
wget -b http://project-products.com/2023/vm-image-lastest.iso
tail -f wget -log
Wget è un’utilità più vecchia che risale ai tempi i cui le connessioni di rete erano meno affidabili, a cui si deve la sua caratteristica di avere la capacità di riprovare i tentativi di download interrotti. Il valore predefinito dei tentativi è 20, ma gli utenti possono modificare questo valore con l’opzione –tries= e impostarlo su 0, inf (infinito) o qualsiasi altra via di mezzo, come visto qui:
wget –tries=42 http://project-products.com/2023/projects.pdf
Allo stesso modo, utilizzare l’opzione -c per continuare i download interrotti. Se è necessario riavviare un download a causa di un’interruzione, al nome del nuovo file verrà aggiunto .1 perché il file originale tentato esiste già.
wget -c http://project-products.com/2023/ vm-image-lastest.iso
Un’altra preoccupazione relativa ai file di grandi dimensioni è il controllo del consumo di larghezza di banda. Gli esperti suggeriscono di impostare Wget in modo che consumi solo una parte della larghezza di banda disponibile utilizzando l’opzione –limit-rate=. Un limite di 750 KB è simile al seguente:
wget –limit-rate=750k http://project-products.com/2023/ vm-image-lastest.iso
Esistono varie altre opzioni di Wget, ma queste dovrebbero essere sufficienti per iniziare.
cURL e Wget: casi d’uso comuni
Sia cURL che Wget sono utili per i trasferimenti di file, ma esistono altri casi d’uso che includono:
- Scaricare l’immagine più recente di contenitori o VM.
- Scaricare immagini ISO del sistema operativo specifiche.
- Scaricare pacchetti software, come Microsoft .msi, Brew .sh o Linux .rpm/.deb.
- Scaricare i file di configurazione da un repository centrale.
- Eseguire il mirroring di siti Web importanti per reti isolate o con air gap.
- Caricare, nel caso di cURL, uno qualsiasi degli esempi precedenti su server di destinazione remoti
Ognuno di questi esempi potrebbe utilizzare un server Web pubblico basato su Internet come origine o un server Web privato interno. In altre parole, gli utenti possono facilmente integrare cURL o Wget nel sistema di distribuzione dei file della propria organizzazione.
Conclusione
Riassumendo, i punti chiave di una messa a confronto tra cURL e Wget:
- CURL utilizza più protocolli e supporta più piattaforme host rispetto a Wget
- CURL carica e scarica risorse, mentre Wget scarica principalmente file
- Wget è un semplice eseguibile sul sistema, mentre cURL è un’applicazione più completa con una libreria di supporto
- Wget carica solo utilizzando una funzionalità HTTP POST limitata, mentre cURL è una scelta migliore per inviare file in posizioni remote
- La capacità di Wget di recuperare risorse in modo ricorsivo è vantaggiosa ed è una cosa che cURL non ha
- Wget è più orientato al recupero di pagine Web o siti Web, mentre cURL è uno strumento di trasferimento file multifunzionale.