Il download di contenuti da server remoti è un’attività comune sia per gli amministratori che per gli sviluppatori. Sebbene esistano numerosi strumenti per questo compito, cURL si distingue per la sua flessibilità e semplicità. È un’utilità da riga di comando che supporta protocolli come HTTP, HTTPS, FTP e SFTP, rendendola fondamentale per l’automazione, la creazione di script e il trasferimento efficiente dei file.
Puoi eseguire cURL direttamente sul tuo computer per scaricare file. Puoi anche integrarlo negli script per semplificare la gestione dei dati, riducendo così il lavoro manuale e gli errori. Questa guida mostra diversi modi per scaricare file con cURL. Seguendo questi esempi, imparerai a gestire i reindirizzamenti, rinominare i file e monitorare l’avanzamento dei download. Alla fine, sarai in grado di utilizzare cURL con sicurezza per le attività su server o ambienti cloud.
Il comando curl funziona con più protocolli, ma viene utilizzato principalmente con HTTP e HTTPS per connettersi ai server web. All’occorrenza può anche interagire con server FTP o SFTP.
Per impostazione predefinita, cURL recupera una risorsa da un URL specificato e la visualizza nel terminale (output standard). Questo è utile per visualizzare il contenuto di un file senza salvarlo, soprattutto se si tratta di un piccolo file di testo.
Esempio: per visualizzare il contenuto di un file di testo ospitato su https://example.com/file.txt, esegui:
curl https://example.com/file.txt
Per documenti di testo brevi questo approccio va bene. Tuttavia, file di grandi dimensioni o binari possono riempire lo schermo di dati illeggibili, quindi di solito è preferibile salvarli.
Spesso, l’obiettivo principale è salvare il file scaricato sul computer locale anziché visualizzarlo nel terminale. cURL semplifica questo con l’opzione -O (O maiuscola), che conserva il nome originale del file remoto.
curl -O https://example.com/file.txt
Questo scarica file.txt e lo salva nella directory corrente con lo stesso nome. Questo metodo è rapido e mantiene il nome esistente, utile se il nome del file ha un significato specifico.
A volte è importante rinominare il file scaricato per evitare conflitti o creare una convenzione di nomi chiara. In questo caso, usa l’opzione -o (o minuscola):
curl -o miofile.txt https://example.com/file.txt
Qui, cURL scarica il file remoto file.txt ma lo salva localmente come miofile.txt. Questo aiuta a mantenere i file organizzati e a evitare sovrascritture accidentali. È particolarmente utile negli script che richiedono nomi di file descrittivi.
Quando si richiede un file, i server possono istruire il client a passare a un altro URL. Comprendere e gestire i reindirizzamenti è fondamentale per completare correttamente i download.
I reindirizzamenti sono comunemente utilizzati per siti web riorganizzati, file spostati o mirror. Senza il supporto per i reindirizzamenti, cURL si ferma dopo aver ricevuto una risposta “spostato” e non otterrai il file.
Per indicare a cURL di seguire una catena di reindirizzamenti fino alla destinazione finale, utilizza -L (o --location):
curl -L -O https://example.com/redirected-file.jpg
Questo consente a cURL di recuperare il file corretto anche se l’URL originale punta altrove. Se ometti -L, cURL mostrerà semplicemente il messaggio di reindirizzamento e terminerà, il che può essere un problema su siti con più reindirizzamenti.
cURL può anche gestire più download contemporaneamente, evitando di dover eseguire ripetutamente il comando.
Se i nomi dei file condividono un modello, le parentesi graffe {} consentono di specificare ciascun nome in modo conciso:
curl -O https://example.com/files/{file1.jpg,file2.jpg,file3.jpg}
cURL scarica ogni file in sequenza, rendendolo utile per i flussi di lavoro automatizzati.
Per una serie di file numerati o etichettati alfabeticamente, specifica un intervallo tra parentesi quadre:
curl -O https://example.com/files/file[1-5].jpg
cURL itera automaticamente tra i file file1.jpg e file5.jpg. È ideale per sequenze di file con nomi coerenti.
Se hai URL diversi per ciascun file, puoi concatenarli:
curl -O https://example1.com/file1.jpg -O https://example2.com/file2.jpg
Questo approccio scarica file1.jpg dal primo sito e file2.jpg dal secondo senza dover eseguire più comandi.
In alcune situazioni, potresti voler controllare la velocità di download o evitare che cURL attenda troppo a lungo un server non reattivo.
Per evitare di sovraccaricare la rete o simulare condizioni lente, limita la velocità di download con --limit-rate:
curl --limit-rate 2M -O https://example.com/bigfile.zip
2M indica 2 megabyte al secondo. Puoi anche usare K per kilobyte o G per gigabyte.
Se un server è troppo lento, puoi chiedere a cURL di interrompere l’operazione dopo un determinato periodo. L’opzione --max-time serve proprio a questo:
curl --max-time 60 -O https://example.com/file.iso
Qui, cURL si interrompe dopo 60 secondi, utile negli script che necessitano di un fallimento rapido.
cURL può adattare la sua uscita per mostrare informazioni minime o dettagli estesi.
Per attività automatiche o cron job in cui non hai bisogno della barra di avanzamento, includi -s (o --silent):
curl -s -O https://example.com/file.jpg
Questo nasconde il progresso e gli errori, utile per log più puliti. Tuttavia, è più difficile eseguire il debug se si verifica un errore silenzioso.
Al contrario, -v (o --verbose) mostra informazioni dettagliate sulle richieste e risposte:
curl -v https://example.com
L’output dettagliato è prezioso per risolvere problemi come certificati SSL non validi o reindirizzamenti errati.
Alcuni download richiedono credenziali o una connessione sicura.
Quando un server richiede un nome utente e una password, usa -u:
curl -u username:password -O https://example.com/protected/file.jpg
Inserire direttamente le credenziali può essere rischioso, poiché potrebbero apparire nei log o nei processi. Prendi in considerazione l’uso di variabili d’ambiente o file .netrc per una gestione più sicura.
Per impostazione predefinita, cURL verifica i certificati SSL. Se il certificato non è valido, cURL blocca il trasferimento. Puoi ignorare questo controllo con -k o --insecure, anche se ciò comporta rischi per la sicurezza. Quando possibile, utilizza un’autorità di certificazione affidabile per mantenere connessioni autenticate.
In alcuni ambienti, il traffico deve passare attraverso un server proxy prima di raggiungere la destinazione.
Usa l’opzione -x o --proxy per specificare il proxy:
curl -x http://proxy_host:proxy_port -O https://example.com/file.jpg
Sostituisci proxy_host e proxy_port con i dati appropriati. cURL inoltra la richiesta al proxy, che poi recupera il file per tuo conto.
Se il proxy richiede credenziali, includile nell’URL:
curl -x https://proxy.example.com:8080 -U mioutente:miapassword -O https://example.com/file.jpg
Anche in questo caso, archiviare dati sensibili in testo normale è pericoloso. È meglio usare variabili d’ambiente o file di configurazione.
Monitorare l’avanzamento del download è importante per file di grandi dimensioni o connessioni lente.
Per impostazione predefinita, cURL mostra un indicatore di avanzamento che include dimensione totale, velocità di trasferimento e tempo stimato di completamento. Ad esempio:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1256 100 1256 0 0 2243 0 --:--:-- --:--:-- --:--:-- 2246
Questa visualizzazione ti aiuta a stimare quanto manca e se la velocità di trasferimento è adeguata.
Se vuoi meno dettagli, aggiungi -#:
curl -# -O https://example.com/largefile.iso
Una barra più semplice mostra l’avanzamento complessivo in percentuale. È più leggibile ma non include statistiche dettagliate come la velocità attuale.
Quando utilizzi cURL all’interno di script, potresti voler registrare i dati sull’avanzamento. Normalmente, cURL invia queste informazioni a stderr, quindi puoi reindirizzarle:
curl -# -O https://example.com/largefile.iso 2>progress.log
Qui, progress.log contiene gli aggiornamenti di stato che puoi analizzare o salvare per revisioni future.
cURL si distingue come uno strumento da riga di comando flessibile per scaricare file tramite diversi protocolli e ambienti. Che tu debba gestire reindirizzamenti complessi, rinominare file al volo o limitare la larghezza di banda, cURL offre tutte le opzioni necessarie. Padroneggiando i suoi principali parametri e modalità, potrai integrare cURL senza problemi nel tuo flusso di lavoro quotidiano per scripting, automazione e trasferimenti di file più efficienti.