Introduzione
curl
è un utility della riga di comando per il trasferimento di dati da o verso un server progettato per funzionare senza l'interazione dell'utente. Con curl
, è possibile fare upload e download di dati utilizzando uno dei protocolli supportati tra cui HTTP, HTTPS, SCP , SFTP e FTP . curl
fornisce una serie di opzioni che consentono di riprendere i trasferimenti, limitare la larghezza di banda, il supporto proxy, l'autenticazione utente e molto altro.
In questo tutorial, ti mostreremo come utilizzare lo strumento curl attraverso esempi pratici e spiegazioni dettagliate delle opzioni di curl più comuni.
Installare Curl
Oggi il pacchetto curl è preinstallato sulla maggior parte delle distribuzioni Linux.
Per verificare se il pacchetto Curl è installato sul tuo sistema, apri la tua console, digita curl
e premi Invio. Se curl
è installato, il sistema stamperà curl: try 'curl --help' or 'curl --manual' for more information
. Altrimenti, vedrai qualcosa di simile curl command not found
.
Se curl
non è installato, è possibile installarlo facilmente utilizzando il gestore pacchetti della propria distribuzione.
Installa Curl su Ubuntu e Debian
sudo apt update
sudo apt install curl
Installa Curl su CentOS e Fedora
sudo yum install curl
Come usare Curl
La sintassi per il comando curl
è la seguente:
curl [options] [URL...]
Nella sua forma più semplice, se richiamato senza alcuna opzione, curl
visualizza la risorsa specificata nell'output standard.
Ad esempio, per recuperare la home page di example.com
dovresti eseguire:
curl example.com
Il comando stamperà il codice sorgente della homepage di example.com
nella finestra del terminale.
Se non viene specificato alcun protocollo, curl
prova a indovinare il protocollo che desideri utilizzare, in base all'indirizzo che specifichi e verrà impostato per impostazione predefinita HTTP
.
Salvare l'output in un file
Per salvare il risultato del comando curl
, utilizzare l'opzione -o
o -O
.
L'opzione -o
(minuscolo) salva il file con un nome file predefinito, che nell'esempio seguente è vue-v2.6.10.js
:
curl -o vue-v2.6.10.js https://cdn.jsdelivr.net/npm/vue/dist/vue.js
L'opzione -O
(maiuscolo) salva il file con il suo nome file originale:
curl -O https://cdn.jsdelivr.net/npm/vue/dist/vue.js
Scaricare più file
Per scaricare più file contemporaneamente, utilizzare più opzioni -O
, seguite dall'URL nel file che si desidera scaricare.
Nel seguente esempio stiamo scaricando i file ISO di Arch Linux e Debian:
curl -O http://mirrors.edge.kernel.org/archlinux/iso/2018.06.01/archlinux-2018.06.01-x86_64.iso \
-O https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.4.0-amd64-netinst.iso
Riprendi un download
È possibile riprendere un download utilizzando l'opzione -C -
. Ciò è utile se la connessione si interrompe durante il download di un file di grandi dimensioni e invece di avviare il download da zero, è possibile continuare con quello precedente.
Ad esempio, se stai scaricando il file iso Ubuntu 18.04 usando il seguente comando:
curl -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso
e improvvisamente la connessione si interrompe è possibile riprendere il download con questo comando:
curl -C - -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso
Ottienere le intestazioni HTTP di un URL (HTTP Headers)
Le intestazioni HTTP sono coppie chiave-valore separate da due punti contenenti informazioni come agente utente, tipo di contenuto e codifica. Le intestazioni vengono passate tra il client e il server con la richiesta o la risposta.
Utilizzare l'opzione -I
per recuperare solo le intestazioni HTTP della risorsa specificata:
curl -I --http2 https://www.ubuntu.com/
Verificare se un sito Web supporta HTTP/2
Per verificare se un determinato URL supporta il nuovo protocollo HTTP / 2 , recupera le intestazioni HTTP con l'opzione -I
insieme all'opzione --http2
:
curl -I --http2 -s https://noviello.it/ | grep HTTP
L'opzione -s
permette al comando curl
di eseguire in modo silenzioso (silenzioso) e nascondere l'indicatore di stato e i messaggi di errore.
Se il server remoto supporta HTTP 2, curl
stampa HTTP/2.0 200
:
HTTP/2 200
Altrimenti, la risposta è HTTP/1.1 200
:
HTTP/1.1 200 OK
Se si dispone della versione di curl 7.47.0
o più recente, non è necessario utilizzare l'opzione --http2
perché HTTP/2 è abilitato per impostazione predefinita per tutte le connessioni HTTPS.
Seguire i reindirizzamenti
Per impostazione predefinita, curl
non segue le intestazioni della posizione HTTP.
Se provi a recuperare la versione non www di google.com
, noterai che invece di ottenere l'origine della pagina verrai reindirizzato alla versione www:
curl google.com
L'opzione -L
indica all'utility curl
di seguire qualsiasi reindirizzamento fino a raggiungere la destinazione finale:
curl -L google.com
Cambiare l'User-Agent
A volte durante il download di un file, il server remoto può essere impostato per bloccare Curl User-Agent o per restituire contenuti diversi a seconda del dispositivo visitatore e del browser.
In situazioni come questa per emulare un browser diverso, utilizzare l'opzione -A
.
Ad esempio per emulare Firefox 60 dovresti usare:
curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" https://getfedora.org/
Specificare una velocità di trasferimento massima
L'opzione --limit-rate
consente di limitare la velocità di trasferimento dei dati. Il valore può essere espresso in byte, kilobyte con il suffisso k
, megabyte con il suffisso m
e gigabyte con il suffisso g
.
Nell'esempio seguente curl
scaricherà il file binario Go e verrà limitata la velocità di download a 1 mb:
curl --limit-rate 1m -O https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
Questa opzione è utile per evitare di consumare tutta la larghezza di banda disponibile.
Trasferire file via FTP
Per accedere a un server FTP protetto con curl
, utilizzare l'opzione -u
e specificare il nome utente e la password come mostrato di seguito:
curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/
Una volta effettuato l'accesso, il comando elenca tutti i file e le directory nella home directory dell'utente.
È possibile scaricare un singolo file dal server FTP utilizzando la sintassi seguente:
curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/file.tar.gz
Per caricare un file sul server FTP, utilizzare il parametro -T
seguito dal nome del file che si desidera caricare:
curl -T newfile.tar.gz -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/
Inviare cookie
A volte potrebbe essere necessario effettuare una richiesta HTTP con cookie specifici per accedere a una risorsa remota o eseguire il debug di un problema.
Per impostazione predefinita, quando si richiede una risorsa con curl
, nessun cookie viene inviato o memorizzato.
Per inviare i cookie al server, utilizzare l'opzione -b
seguita da un nome file contenente i cookie o una stringa.
Ad esempio, per scaricare il file rpm Oracle Java JDK jdk-10.0.2_linux-x64_bin.rpm
è necessario passare un cookie denominato oraclelicense
con valore a
:
curl -L -b "oraclelicense=a" -O http://download.oracle.com/otn-pub/java/jdk/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_linux-x64_bin.rpm
Utilizzare dei proxy
curl
supporta diversi tipi di proxy, inclusi HTTP, HTTPS e SOCKS. Per trasferire i dati tramite un server proxy, utilizzare l'opzione -x
(--proxy
), seguito dall'URL del proxy.
Il seguente comando scarica la risorsa specificata utilizzando un proxy 192.168.44.1
sulla porta 8888
:
curl -x 192.168.44.1:8888 http://linux.com/
Se il server proxy richiede l'autenticazione, utilizzare l'opzione -U
(--proxy-user
) seguita dal nome utente e dalla password separati da due punti (user:password
):
curl -U username:password -x 192.168.44.1:8888 http://linux.com/
Conclusione
curl
è uno strumento da riga di comando che consente di trasferire dati da o verso un host remoto. È utile per risolvere problemi, scaricare file e altro.
Per ulteriori informazioni su curl
v isitare la pagina della documentazione di Curl.