cURL in Linux: da dove iniziare?

Il software libero cURL è uno dei primi e più popolari progetti open source. Il programma scritto in C viene utilizzato per inviare dati nelle reti informatiche. Il nome cURL sta per “client URL”. La licenza aperta concede il diritto di utilizzarlo per qualsiasi scopo e attualmente viene usato in innumerevoli dispositivi.

Che cos’è cURL?

Il software cURL è composto da due componenti. La libreria del software libcurl è alla base dell’effettivo trasferimento dei dati e supporta i seguenti protocolli:

  • DICT
  • FILE
  • FTP
  • FTPS
  • GOPHER
  • HTTP
  • HTTPS
  • IMAP
  • IMAPS
  • LDAP
  • LDAPS
  • POP3
  • POP3S
  • RTMP
  • RTSP
  • SCP
  • SFTP
  • SMB
  • SMBS
  • SMTP
  • SMTPS
  • TELNET
  • TFTP

Il programma a riga di comando cURL agisce, invece, come un’interfaccia testuale e interagisce con libcurl tramite la riga di comando.

Il programma è uno strumento importante per lo sviluppo web, perché permette allo sviluppatore di comunicare direttamente con i server invece di passare per un browser. Gli script basati sui comandi cURL (in inglese “cURL commands”) vengono utilizzati per automatizzare processi nonché per il testing e il debugging.

Come funziona cURL?

I due componenti di cURL funzionano in modi diversi.

Come si usa libcurl?

La libreria del programma libcurl consente di inviare dati a reti informatiche. Sono disponibili diversi “Language Bindings” (collegamenti a linguaggi) per molti dei linguaggi di programmazione più popolari, il che rende le funzioni di libcurl compatibili con un gran numero di software che comunicano con i server.

Come si usa cURL?

Il programma a riga di comando cURL viene utilizzato per lo sviluppo web. Il metodo più semplice consiste nel digitare i comandi cURL nella riga di comando, dove è possibile, con le conoscenze appropriate, sottoporre i server e le API a procedure di testing e debugging.

Invece di immettere i comandi manualmente nella riga di comando, potete anche raggrupparli in script. Ciò consente di standardizzare e automatizzare operazioni complesse. Questo vale sia per il caricamento e il download di dati che per la compilazione, a livello di programmazione, di moduli e il mirroring di interi siti web.

Lo schema di un comando cURL è generalmente il seguente:

# Schema generale di un comando cURL
curl [opzioni] </url>

Negli esempi successivi utilizziamo lo schema seguente:

# Visualizzare l’URL seguente
url="www.example.com"
curl [opzioni] "$url"

Abbiamo esternalizzato l’URL a una variabile, focalizzando l’attenzione sulle opzioni. Le opzioni determinano il funzionamento della chiamata cURL.

Esempi pratici del comando cURL in Linux

Per utilizzare i seguenti esempi di cURL, è necessario:

  1. un computer con sistema operativo Linux o simile a UNIX, incluso macOS;
  2. accesso alla console o alla riga di comando;
  3. un editor di codice/editor di testo semplice per la composizione di comandi.
N.B.

Usate un solo editor di codice/editor di testo semplice per comporre i comandi. Non dovreste mai utilizzare un software di elaborazione testi come Word, OpenOffice o LibreOffice per preparare un testo per la riga di comando.

Un primo test con cURL

Verificate innanzitutto se cURL è installato sul vostro sistema. A tale scopo, aprite la riga di comando e inserite il comando seguente. Potrebbe essere necessario premere Invio per eseguire il codice.

# Verificare l’installazione di cURL
curl --version

Se vi appare un testo che inizia con “curl” e un numero di versione, allora cURL è installato. Se cURL invece non fosse installato, seguite le istruzioni di “Everything curl” per installare il programma.

Consiglio

Con i comandi “curl --help” e “curl --manual” riceverete maggiori informazioni sul comando cURL.

È inoltre consigliabile aprire nell’editor di codice un documento nuovo. Potete copiare i comandi per prepararli all’uso nella riga di comando. Non appena il comando è pronto, copiatelo nella riga di comando ed eseguitelo.

N.B.

I comandi usati nella riga di comando sono molto potenti. Un comando immesso in modo errato può anche paralizzare l’intero sistema. Pertanto, non è consigliato copiare comandi da Internet ed eseguirli sulla riga di comando. Dovreste invece aprire un documento vuoto in un editor di codice e copiarli lì. Questo passaggio intermedio vi costringe a fare una breve pausa, rivedere e, se necessario, adattare ogni comando prima di eseguirlo.

Scaricare file con cURL

Scaricare dati da un server con cURL

In linea di principio, con cURL potete recuperare qualsiasi URL che conoscete. Il termine “curl” viene utilizzato, in questo contesto, sostanzialmente per indicare l’indirizzamento di un URL con cURL. Provate a eseguire il seguente comando:

# Indirizzare il seguente sito
site="www.google.com"
curl "$site"

Se eseguite il codice così come indicato, otterrete una massa confusa di dati. In risposta all’accesso cURL, infatti, verrebbe restituita la pagina iniziale di Google in formato HTML. Il codice sorgente HTML viene visualizzato direttamente nella riga di comando senza formattazione. Per poterlo visualizzare correttamente serve tuttavia un browser. Un’opzione migliore è di solito quella di salvare il file in locale.

Consiglio

Utilizzate il comando “clear” nella riga di comando per svuotare lo schermo. In questo modo è possibile eliminare quantità esorbitanti di dati dalla riga di comando.

Scaricare un file con cURL e salvarlo in locale

Scarichiamo un logo dalla versione inglese di Wikipedia. L’opzione “-O” (o maiuscola, non zero) indica a cURL di usare il nome del file posizionato alla fine dell’URL. Con questa opzione, cURL salverà il file scaricato in locale mantenendo il nome.

# Un’immagine della versione inglese di Wikipedia
file="https://en.wikipedia.org/static/images/project-logos/enwiki-2x.png"
# Scaricare l’immagine e salvarla in locale con lo stesso nome
curl "$file" -O

Come si comporta invece con un URL di cui non è indicato il nome? Testate il seguente codice:

# Pagina iniziale di Google
homepage="www.google.com"
# Scaricare la pagina iniziale con l’opzione -O
curl "$homepage" -O

Come vedete, si è verificato un errore perché nell’URL della pagina iniziale di Google non è specificato alcun nome. In questo caso, con l’opzione “-o” (o minuscola), potete assegnare voi un nome al file:

# Pagina iniziale di Google
homepage="www.google.com"
# Nome del file da scrivere
nome="homepage-google.html"
# Scaricare la pagina iniziale e salvarla localmente con il nome scelto
curl "$homepage" -o "$nome"

Riprendere un download interrotto con cURL

Forse vi è già capitato che un download di grandi dimensioni, che è durato diverse ore, si interrompa improvvisamente e siete stati costretti a ricominciare da capo. In questo caso, cURL vi può aiutare con l’opzione “-C-”:

# Un grande file (genoma umano) da scaricare
file="https://ftp.ncbi.nih.gov/genomes/refseq/vertebrate_mammalian/Homo_sapiens/reference/GCF_000001405.39_GRCh38.p13/GCF_000001405.39_GRCh38.p13_genomic.gbff.gz"
# Continuare il download se interrotto
curl -C- -O "$file"
N.B.

L’opzione contiene in realtà uno spazio dopo la C “-C -”. La versione equivalente “-C-” che usiamo in questi esempi è, tuttavia, più leggibile e più facile da ricordare.

Se necessario, è anche possibile annullare manualmente un download avviato con cURL. Ciò è particolarmente vantaggioso nel caso di file di grandi dimensioni, ad esempio se si deve uscire di casa e portare il portatile con sé.

Consiglio

Le chiamate in corso di cURL possono essere annullate. Per farlo, premete Ctrl + C, se necessario anche più volte.

Comunicare con il server utilizzando cURL

La funzionalità di download di cURL è simile a quella del popolare strumento da riga di comando wget. cURL, tuttavia, non è specializzato nei download, ma è progettato per la comunicazione generale nelle reti. Le funzioni di cURL quindi non finiscono qui.

Verificare con cURL se un server è raggiungibile

Con cURL è possibile verificare se un server è raggiungibile. In questo senso, il funzionamento di cURL è simile a quello del comando ping. cURL offre, tuttavia, una maggiore flessibilità grazie alla grande varietà di protocolli e opzioni supportati. Ping lavora, inoltre, a livello di Internet mentre cURL interviene a livello di applicazione. Ciò significa che Ping verifica se la macchina è collegata a Internet. Il seguente comando cURL, invece, controlla se e come risponde un server:

# Verificare se un server web è raggiungibile
server="google.com"
curl -I "$server"

Se dopo l’esecuzione del codice vengono visualizzate le informazioni sullo stato, il server è raggiungibile.

Ricevere header con cURL

Per ogni richiesta HTTP, oltre al documento vero e proprio, vengono scambiati diversi metadati. Queste informazioni relative all’intestazione HTTP descrivono sia il documento che lo stato della richiesta HTTP. Sicuramente vi sarà capitato di incontrare l’errore “404 Not Found”. Si tratta proprio di un metadato, che indica che il documento richiesto non è stato trovato.

Date un’occhiata all’output delle intestazioni dell’URL “google.com”. Usate a questo scopo cURL con l’opzione “--head”:

# Ricevere l’header
url="google.com"
curl --head "$url"

Tra le altre cose, dovreste vedere la dicitura “301 Moved Permanently”. Si tratta di un codice di stato HTTP per il reindirizzamento permanente, in questo caso di [google.com] (senza 'www') a [www.google.com].

Consiglio

Invece dell’opzione “--head”, è anche possibile usare l’alternativa “-I” (i maiuscola). Per ricordarlo più facilmente pensate che lo utilizzate per recuperare Informazioni di un URL e non il suo contenuto effettivo.

Analizzare le catene di reindirizzamento con cURL

reindirizzamenti HTTP (in inglese “Redirects”) possono essere collegati in serie. In questo contesto, viene utilizzato il termine “catena di reindirizzamento (in inglese Redirect Chain). Immaginiamo, ad esempio, un sito web la cui pagina iniziale è [https://www.example.com/]. Se, tuttavia, indirizziamo questo sito con [http://example.com], potrebbero verificarsi i seguenti reindirizzamenti:

  • [http://example.com] → [https://example.com]
  • [https://example.com] → [https://www.example.com]
  • [https://www.example.com] → [https://www.example.com/]

Una catena di reindirizzamenti comporta tempi di caricamento inutilmente lunghi e dovrebbe essere evitata. Purtroppo, questo non è un problema facile da analizzare. Quando si carica il sito nel browser, i reindirizzamenti vengono eseguiti senza che l’utente se ne accorga. In questo caso, cURL vi aiuta con l’opzione “--location”, che indica a cURL di seguire tutti i reindirizzamenti. In questo esempio usiamo l’opzione “--head” perché non siamo interessati al contenuto delle pagine.

# Verificare reindirizzamenti
url="google.com"
curl --location --head "$url"
Consiglio

Invece dell’opzione “--location”, potete usare anche l’alternativa “-L” (l maiuscola).

Trasferire dati su un server con cURL

cURL non permette soltanto di scaricare dei dati, ma anche di inviarne su un server. Questa funzione è molto pratica, ad esempio, se si desidera automatizzare la compilazione di un modulo online. Oltre al metodo di richiesta POST, cURL supporta anche quello GET.

Poiché l’invio di dati è più complesso che il loro download, possiamo delineare qui soltanto un esempio approssimativo. Per informazioni più dettagliate, consultate la pagina Everything curl.

# Trasferire dati al server
url="example.com"
# Indicare i dati come membri nomi-valore separati da '&'
dati="nome=Mario&cognome=Rossi&età=42"
# Con questa richiesta i dati saranno trasferiti con il metodo POST
curl --data "$date" "$url"
# In alternativa, è possibile indicare a curl di trasferire i dati tramite GET
curl --data "$date" "$url" --get

Leggere i cookies con cURL

cookie HTTP sono piccole informazioni di testo che vengono, in genere, memorizzate in locale sul dispositivo quando si visitano dei siti web. Nel browser è possibile sia visualizzare il contenuto dei cookie di un sito visitato che eliminarli. Di solito, si tratta tuttavia di una procedura troppo complicata da eseguire ai fini di un test. Combinando cURL con l’opzione “--cookie-jar” (in italiano “barattolo per biscotti”) è possibile accedere ai cookie in modo più diretto.

# Leggere i cookie
url="www.google.com"
cookies="cookies.txt"
curl --head --cookie-jar "$cookies" "$url"
# Visualizzare i cookie con il comando cat
cat "$cookies"
Consiglio

Utilizzando l’opzione “--cookie”, è inoltre possibile indicare a cURL di inviare dei cookie.

Opzioni generali

Alcune delle opzioni cURL disponibili possono essere combinate con quelle già presentate.

Visualizzare informazioni aggiuntive

A volte le informazioni visualizzate durante l’esecuzione di un comando cURL possono essere insufficienti. In questo caso è possibile utilizzare l’opzione “--verbose”. Un comando cURL con questa opzione fornisce una maggiore quantità di informazioni.

# Visualizzare informazioni aggiuntive
url="www.google.com"
curl --verbose -I "$url"

Specificare utente e password con cURL

Alcuni URL sono protetti da accessi non autorizzati con l’autenticazione HTTP. Ma cosa succede se dovete accedere a un URL del genere con cURL? Se non indicate il nome utente e la password, vedreste l’errore HTTP 401. In questo caso, potete utilizzare lo schema seguente:

# Specificare utente e password con curl
# URL protetto da password 
url="www.example.com/secure/"
# Utente
utente=""
# Password
password=""
curl --user "${utente}:${password}" "$url"
Consiglio

È possibile utilizzare cURL anche per scaricare dati da un server FTP. Anche in questo caso torna utile l’opzione --user per specificare il nome utente e la password.

Utilizzare un proxy con cURL

Un proxy è un server intermedio. L’uso di un proxy può essere utile per vari motivi come, ad esempio, adempiere ad alcuni requisiti di sicurezza o di prestazioni.

Se vi connettete a Internet tramite un proxy, dovete comunicarlo a cURL con l’opzione “--proxy”:

# Usare proxy con cURL
url="www.google.com"
proxy="proxy.example.com"
porta="8080"
curl --proxy "${proxy}:${porta}" "$url"
N.B.

Se dovete specificare anche un nome utente e una password per il server proxy, aggiungete l’opzione “--proxy-user”. In questo caso, immettete il nome utente e la password nel formato “utente:password”.

Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.