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/

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 curlv isitare la pagina della documentazione di Curl.