cURL è uno strumento a riga di comando e una libreria che può essere utilizzata per ricevere e inviare dati tra un client e un server o tra due macchine qualsiasi connesse su Internet. Supporta un'ampia gamma di protocolli come HTTP, FTP, IMAP, LDAP, POP3, SMTP e molti altri.
Grazie alla sua natura versatile, cURL viene utilizzato in molte applicazioni e per molti casi d'uso. Ad esempio, lo strumento della riga di comando può essere utilizzato per scaricare file, testare le API e eseguire il debug dei problemi di rete. In questo articolo, vedremo come utilizzare lo strumento da riga di comando cURL per eseguire varie attività.
Contenuti
- 1 Installa cURL
- 1.1 Linux
- 1.2 MacOS
- 1.3 Windows
- Utilizzo di base di 2 cURL
- 3 Download di file con cURL
- 4 Anatomia di una richiesta/risposta HTTP
- 5 seguenti reindirizzamenti con cURL
- 6 Visualizzazione delle intestazioni delle risposte con cURL
- 7 Visualizzazione delle intestazioni delle richieste e dei dettagli di connessione
- 8 Silenziamento degli errori
- 9 Impostazione delle intestazioni delle richieste HTTP con cURL
- 10 Effettuare richieste POST con cURL
- 11 Invio di dati JSON con cURL
- 12 Modifica del metodo di richiesta
- 13 Replica delle richieste del browser con cURL
- 14 Fare in modo che cURL fallisca in caso di errori HTTP
- 15 Effettuare richieste autenticate con cURL
- 16 Test del supporto del protocollo con cURL
- 17 Impostazione dell'intestazione Host e dell'opzione –resolve di cURL
- 18 Risolvi i domini in indirizzi IPv4 e IPv6
- 19 Disabilitazione dei controlli dei certificati di cURL
- 20 Risoluzione dei problemi relativi al sito Web con "analisi dei tempi di cURL"
- 21 file di configurazione cURL
- 22 Conclusione
Installa cURL
Linux
La maggior parte delle distribuzioni Linux ha cURL installato per impostazione predefinita. Per verificare se è installato sul tuo sistema o meno, digita curl
nella finestra del tuo terminale e premi invio. Se non è installato, mostrerà un errore "comando non trovato". Usa i comandi seguenti per installarlo sul tuo sistema.
Per i sistemi basati su Ubuntu/Debian utilizzare:
sudo apt update sudo apt install curl
Per i sistemi CentOS/RHEL, utilizzare:
sudo yum install curl
D'altra parte, per i sistemi Fedora, puoi usare il comando:
sudo dnf install curl
MacOS
MacOS viene fornito con cURL preinstallato e riceve aggiornamenti ogni volta che Apple rilascia aggiornamenti per il sistema operativo. Tuttavia, nel caso in cui desideri installare la versione più recente di cURL, puoi installare il curl
Pacchetto Homebrew. Una volta installato Homebrew, puoi installarlo con:
brew install curl
Finestre
Per Windows 10 versione 1803 e successive, cURL ora viene fornito per impostazione predefinita nel prompt dei comandi, quindi puoi usarlo direttamente da lì. Per le versioni precedenti di Windows, il progetto cURL dispone di file binari di Windows. Una volta scaricato il file ZIP ed estratto, troverai una cartella denominata curl-<version number>-mingw
. Sposta questa cartella in una directory a tua scelta. In questo articolo, assumeremo che la nostra cartella si chiami curl-7.62.0-win64-mingw
e l'abbiamo spostato in C:
.
Successivamente, dovresti aggiungere bin
di cURL nella directory PATH
di Windows variabile di ambiente, in modo che Windows possa trovarla quando digiti curl
nel prompt dei comandi. Affinché funzioni, devi seguire questi passaggi:
- Apri la finestra di dialogo "Proprietà di sistema avanzate" eseguendo
systempropertiesadvanced
dalla finestra di dialogo Esegui di Windows (tasto Windows + R). - Fai clic sul pulsante "Variabili d'ambiente".
- Fai doppio clic su "Percorso" dalla sezione "Variabili di sistema" e aggiungi il percorso
C:curl-7.62.0-win64-mingwbin
. Per Windows 10, puoi farlo con il pulsante "Nuovo" sulla destra. Nelle versioni precedenti di Windows, puoi digitare;C:curl-7.62.0-win64-mingwbin
(notare il punto e virgola all'inizio) alla fine della casella di testo "Valore".
Una volta completati i passaggi precedenti, puoi digitare curl
per verificare se funziona. Se tutto è andato bene, dovresti vedere il seguente output:
C:UsersAdministrator>curl curl: try 'curl --help' or 'curl --manual' for more information
Utilizzo di base di cURL
La sintassi di base dell'utilizzo di cURL è semplicemente:
curl <url>
Questo recupera il contenuto disponibile all'URL specificato e lo stampa sul terminale. Ad esempio, se esegui curl example.com
, dovresti essere in grado di vedere la pagina HTML stampata, come mostrato di seguito:
Questa è l'operazione più semplice che cURL può eseguire. Nelle prossime sezioni, esamineremo le varie opzioni della riga di comando accettate da cURL.
Download di file con cURL
Come abbiamo visto, cURL scarica direttamente il contenuto dell'URL e lo stampa sul terminale. Tuttavia, se desideri salvare l'output come file, puoi specificare un nome file con -o
opzione, in questo modo:
curl -o vlc.dmg https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg
Oltre a salvare i contenuti, cURL passa alla visualizzazione di una bella barra di avanzamento con le statistiche di download, come la velocità e il tempo impiegato:
Invece di fornire un nome file manualmente, puoi lasciare che cURL determini il nome file con -O
opzione. Quindi, se vuoi salvare l'URL sopra nel file vlc-3.0.4.dmg
, puoi semplicemente usare:
curl -O https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg
Tieni presente che quando usi il -o
o il -O
opzioni ed esiste un file con lo stesso nome, cURL lo sovrascriverà.
Se hai un file parzialmente scaricato, puoi riprendere il download del file con il -C -
opzione, come mostrato di seguito:
curl -O -C - https://ftp.belnet.be/mirror/videolan/vlc/3.0.4/macosx/vlc-3.0.4.dmg
Come la maggior parte degli altri strumenti da riga di comando, puoi combinare diverse opzioni insieme. Ad esempio, nel comando precedente, puoi combinare -O -C -
e scrivilo come -OC -
.
Anatomia di una richiesta/risposta HTTP
Prima di approfondire le funzionalità supportate da cURL, discuteremo un po' delle richieste e delle risposte HTTP. Se hai familiarità con questi concetti, passa direttamente alle altre sezioni.
Per richiedere una risorsa come una pagina Web, o per inviare alcuni dati a un server, un client HTTP (come un browser o cURL) effettua una richiesta HTTP al server Il server risponde con una risposta HTTP, che contiene il "contenuto ” di quella pagina.
Le richieste HTTP contengono il metodo di richiesta, l'URL, alcune intestazioni e alcuni dati facoltativi come parte del "corpo della richiesta". Il metodo di richiesta controlla come deve essere elaborata una determinata richiesta. I tipi più comuni di metodi di richiesta sono "GET" e "POST". In genere, utilizziamo le richieste "GET" per recuperare una risorsa dal server e "POST" per inviare i dati al server per l'elaborazione. Le richieste "POST" in genere contengono alcuni dati nel corpo della richiesta, che il server può utilizzare.
Le risposte HTTP sono simili e contengono il codice di stato, alcune intestazioni e un corpo. Il corpo contiene i dati effettivi che i client possono visualizzare o salvare in un file. Il codice di stato è un codice a 3 cifre che indica al cliente se la richiesta è andata a buon fine o non è riuscita e come dovrebbe procedere ulteriormente. I codici di stato comuni sono 2xx (successo), 3xx (reindirizzamento a un'altra pagina) e 4xx/5xx (per errori).
HTTP è un "protocollo a livello di applicazione" e viene eseguito su un altro protocollo chiamato TCP. Si occupa di ritrasmettere tutti i dati persi e assicura che il client e il server trasmettano i dati a una velocità ottimale. Quando utilizzi HTTPS, un altro protocollo chiamato SSL/TLS viene eseguito tra TCP e HTTP per proteggere i dati.
Molto spesso utilizziamo nomi di dominio come google.com
per accedere ai siti web. La mappatura del nome di dominio su un indirizzo IP avviene tramite un altro protocollo chiamato DNS.
Ora dovresti avere un background sufficiente per comprendere il resto di questo articolo.
Segue reindirizzamenti con cURL
Per impostazione predefinita, quando cURL riceve un reindirizzamento dopo aver effettuato una richiesta, non effettua automaticamente una richiesta al nuovo URL. Ad esempio, considera l'URL https://www.facebook.com
. Quando effettui una richiesta utilizzando questo URL, il server invia un reindirizzamento HTTP 3XX a https://www.facebook.com/
. Tuttavia, il corpo della risposta è vuoto. Quindi, se lo provi, otterrai un output vuoto:
Se vuoi che cURL segua questi reindirizzamenti, dovresti utilizzare il -L
opzione. Se ripeti fai una richiesta per https://www.facebook.com/
con il -L
flag, in questo modo:
curl -L https://www.facebook.com/
Ora sarai in grado di vedere il contenuto HTML della pagina, simile allo screenshot qui sotto. Nella prossima sezione, vedremo come possiamo verificare che sia presente un reindirizzamento HTTP 3XX.
Tieni presente che cURL può seguire i reindirizzamenti solo se il server ha risposto con un "reindirizzamento HTTP", il che significa che il server ha utilizzato un codice di stato 3XX e ha utilizzato l'intestazione "Posizione" per indicare il nuovo URL. cURL non è in grado di elaborare metodi di reindirizzamento basati su Javascript o HTML o "Aggiorna intestazione".
Se è presente una catena di reindirizzamenti, il -L
l'opzione seguirà solo i reindirizzamenti fino a 500 volte. Puoi controllare il numero massimo di reindirizzamenti che seguirà con il --max-redirs
bandiera.
curl -L --max-redirs 700 example.com
Se imposti questo flag su -1
, seguirà i reindirizzamenti all'infinito.
curl -L --max-redirs -1 example.com
Visualizzazione delle intestazioni delle risposte con cURL
Durante il debug di problemi con un sito Web, potresti voler visualizzare le intestazioni di risposta HTTP inviate dal server. Per abilitare questa funzione, puoi utilizzare il -i
opzione.
Continuiamo con il nostro esempio precedente e confermiamo che esiste effettivamente un reindirizzamento HTTP 3XX quando si effettua una richiesta HTTP a https://www.facebook.com/
, eseguendo:
curl -L -i https://www.facebook.com/
Nota che abbiamo utilizzato anche -L
in modo che cURL possa seguire i reindirizzamenti. È anche possibile combinare queste due opzioni e scriverle come -iL
o -Li
invece di -L -i
.
Una volta eseguito il comando, sarai in grado di vedere il reindirizzamento HTTP 3XX, così come la risposta HTTP 200 OK della pagina dopo aver seguito il reindirizzamento:
Se usi il -o
/-O
opzione in combinazione con -i
, le intestazioni e il corpo della risposta verranno salvati in un unico file.
Visualizzazione delle intestazioni delle richieste e dei dettagli di connessione
Nella sezione precedente, abbiamo visto come visualizzare le intestazioni delle risposte HTTP utilizzando cURL. Tuttavia, a volte potresti voler visualizzare maggiori dettagli su una richiesta, come le intestazioni della richiesta inviate e il processo di connessione. cURL offre il -v
flag (chiamato "modalità dettagliata") per questo scopo e può essere utilizzato come segue:
curl -v https://www.booleanworld.com/
L'output contiene i dati della richiesta (contrassegnati con >
), intestazioni di risposta (contrassegnate con <
) e altri dettagli sulla richiesta, come l'IP utilizzato e il processo di handshake SSL (contrassegnato con *
). Il corpo della risposta è disponibile anche sotto queste informazioni. (Tuttavia, questo non è visibile nello screenshot qui sotto).
Molto spesso, non siamo interessati al corpo di risposta. Puoi semplicemente nasconderlo "salvando" l'output sul dispositivo nullo, che è /dev/null
su Linux e MacOS e NUL
su Windows:
curl -vo /dev/null https://www.booleanworld.com/ # Linux/MacOS curl -vo NUL https://www.booleanworld.com/ # Windows
Errori di tacitazione
In precedenza, abbiamo visto che cURL mostra una barra di avanzamento quando si salva l'output in un file. Sfortunatamente, la barra di avanzamento potrebbe non essere utile in tutte le circostanze. Ad esempio, se nascondi l'output con -vo /dev/null
, viene visualizzata una barra di avanzamento che non è affatto utile.
Puoi nascondere tutti questi output extra usando il -s
intestazione. Se continuiamo con il nostro esempio precedente ma nascondiamo la barra di avanzamento, i comandi sarebbero:
curl -svo /dev/null https://www.booleanworld.com/ # Linux/MacOS curl -svo NUL https://www.booleanworld.com/ # Windows
Il -s
l'opzione è un po' aggressiva, tuttavia, poiché nasconde persino i messaggi di errore. Per il tuo caso d'uso, se desideri nascondere la barra di avanzamento, ma visualizzare comunque eventuali errori, puoi combinare il -S
opzione.
Quindi, se stai cercando di salvare l'output di cURL in un file ma vuoi semplicemente nascondere la barra di avanzamento, puoi usare:
curl -sSvo file.html https://www.booleanworld.com/
Impostazione delle intestazioni delle richieste HTTP con cURL
Quando si testano le API, potrebbe essere necessario impostare intestazioni personalizzate sulla richiesta HTTP. cURL ha il -H
opzione che puoi utilizzare per questo scopo. Se vuoi inviare l'intestazione personalizzata X-My-Custom-Header
con il valore di 123
a https://httpbin.org/get
, dovresti eseguire:
curl -H 'X-My-Custom-Header: 123' https://httpbin.org/get
(httpbin.org è un sito Web molto utile che ti consente di visualizzare i dettagli della richiesta HTTP che gli hai inviato.)
I dati restituiti dall'URL mostrano che questa intestazione è stata effettivamente impostata:
Puoi anche sovrascrivere qualsiasi intestazione predefinita inviata da cURL come le intestazioni "User-Agent" o "Host". Il client HTTP (nel nostro caso, cURL) invia l'intestazione "User-Agent" per comunicare al server il tipo e la versione del client utilizzato. Inoltre, il client utilizza l'intestazione "Host" per comunicare al server il sito che dovrebbe servire. Questa intestazione è necessaria perché un server Web può ospitare più siti Web su un unico indirizzo IP.
Inoltre, se desideri impostare più intestazioni, puoi semplicemente ripetere il -H
opzione come richiesto.
curl -H 'User-Agent: Mozilla/5.0' -H 'Host: www.google.com' ...
Tuttavia, cURL ha alcune scorciatoie per i flag usati di frequente. Puoi impostare l'intestazione "User-Agent" con il -A
opzione:
curl -A Mozilla/5.0 https://httpbin.org/get
L'intestazione "Referer" viene utilizzata per indicare al server la posizione da cui sono stati indirizzati dal sito precedente. In genere viene inviato dai browser quando si richiedono Javascript o immagini collegate a una pagina o quando si seguono reindirizzamenti. Se desideri impostare un'intestazione "Referer", puoi utilizzare il -e
bandiera:
curl -e https://www.google.com/ https://httpbin.org/get
Altrimenti, se stai seguendo una serie di reindirizzamenti, puoi semplicemente utilizzare -e ';auto'
e cURL si occuperà di impostare i reindirizzamenti da solo.
Effettuare richieste POST con cURL
Per impostazione predefinita, cURL invia richieste GET, ma puoi anche usarlo per inviare richieste POST con -d
o --data
opzione. Tutti i campi devono essere indicati come key=value
coppie separate dalla e commerciale (&
) carattere. Ad esempio, puoi fare una richiesta POST a httpbin.org con alcuni parametri:
curl --data "firstname=boolean&lastname=world" https://httpbin.org/post
Dall'output, puoi facilmente dire che abbiamo pubblicato due parametri (questo appare sotto il tasto "form"):
Qualsiasi carattere speciale come @
, %
, =
o gli spazi nel valore devono essere codificati manualmente tramite URL. Quindi, se desideri inviare un parametro "email" con il valore "[email protetta]", dovresti utilizzare:
curl --data "email=test%40example.com" https://httpbin.org/post
In alternativa, puoi semplicemente utilizzare --data-urlencode
per gestire questo per te. Se desideri inviare due parametri, email
e name
, ecco come dovresti usare l'opzione:
curl --data-urlencode "[email protected]" --data-urlencode "name=Boolean World" https://httpbin.org/post
Se il --data
parametro è troppo grande per essere digitato sul terminale, puoi salvarlo in un file e quindi inviarlo utilizzando @
, in questo modo:
curl --data @params.txt example.com
Finora, abbiamo visto come è possibile effettuare richieste POST utilizzando cURL. Se desideri caricare file utilizzando una richiesta POST, puoi utilizzare il -F
opzione ("modulo"). Qui invieremo il file test.c
, sotto il nome del parametro file
:
curl -F [email protected] https://httpbin.org/post
Questo mostra il contenuto del file, mostrando che è stato inviato correttamente:
Invio di dati JSON con cURL
Nella sezione precedente, abbiamo visto come inviare richieste POST utilizzando cURL. Puoi anche inviare dati JSON utilizzando il --data
opzione. Tuttavia, la maggior parte dei server si aspetta di ricevere una richiesta POST con coppie chiave-valore, simili a quelle discusse in precedenza. Quindi, è necessario aggiungere un'intestazione aggiuntiva denominata "Content-Type:application/json" in modo che il server capisca che sta trattando dati JSON e li gestisce in modo appropriato. Inoltre, non è necessario codificare l'URL dei dati durante l'invio di JSON.
Quindi, se disponi dei seguenti dati JSON e desideri effettuare una richiesta POST a https://httpbin.org/post:
{ "email": "[email protected]", "name": ["Boolean", "World"] }
Quindi, puoi inviare i dati con:
curl --data '{"email":"[email protected]", "name": ["Boolean", "World"]}' -H 'Content-Type: application/json' https://httpbin.org/post
In questo caso, puoi vedere i dati apparire sotto il json
valore nell'output di httpbin.org:
Puoi anche salvare il file JSON e inviarlo come abbiamo fatto in precedenza:
curl --data @data.json https://httpbin.org/post
Modifica del metodo di richiesta
In precedenza, abbiamo visto come inviare richieste POST con cURL. A volte, potrebbe essere necessario inviare una richiesta POST senza alcun dato. In tal caso, puoi semplicemente modificare il metodo di richiesta in POST con il -X
opzione, in questo modo:
curl -X POST https://httpbin.org/post
Puoi anche cambiare il metodo di richiesta con qualsiasi altra cosa, come PUT, DELETE o PATCH. Un'eccezione notevole è il metodo HEAD, che non può essere impostato con il -X
opzione. Il metodo HEAD viene utilizzato per verificare se un documento è presente sul server, ma senza scaricare il documento. Per utilizzare il metodo HEAD, utilizza il -I
opzione:
curl -I https://www.booleanworld.com/
Quando si effettua una richiesta HEAD, cURL visualizza tutte le intestazioni della richiesta per impostazione predefinita. I server non inviano alcun contenuto quando ricevono una richiesta HEAD, quindi non c'è nulla dopo le intestazioni:
Replica delle richieste del browser con cURL
Se desideri replicare una richiesta effettuata tramite il tuo browser tramite cURL, puoi utilizzare gli strumenti di sviluppo di Chrome, Firefox e Safari per ottenere un comando cURL per farlo.
I passaggi coinvolti sono gli stessi per tutte le piattaforme e tutti i browser:
- Apri gli strumenti per sviluppatori in Firefox/Chrome (in genere F12 su Windows/Linux e Cmd+Shift+I su un Mac)
- Vai alla scheda Rete
- Seleziona la richiesta dall'elenco, fai clic con il pulsante destro del mouse e seleziona "Copia come cURL"
Il comando copiato contiene tutte le intestazioni, i metodi di richiesta, i cookie ecc. necessari per replicare esattamente la stessa richiesta. Puoi incollare il comando nel tuo terminale per eseguirlo.
Errore cURL su errori HTTP
È interessante notare che cURL non distingue tra una richiesta HTTP riuscita (2xx) e una richiesta HTTP non riuscita (4xx/5xx). Quindi, restituisce sempre uno stato di uscita pari a 0 fintanto che non si sono verificati problemi di connessione al sito. Questo rende difficile scrivere script di shell perché non c'è modo di verificare se il file può essere scaricato correttamente.
Puoi verificarlo facendo una richiesta manualmente:
curl https://www.booleanworld.com/404 -sSo file.txt
Puoi vedere che curl non stampa alcun errore e anche lo stato di uscita è zero:
Se vuoi considerare anche questi errori HTTP, puoi utilizzare il -f
opzione, in questo modo:
curl https://www.booleanworld.com/404 -fsSo file.txt
Ora puoi vedere che cURL stampa un errore e imposta anche il codice di stato su 22 per informare che si è verificato un errore:
Effettuare richieste autenticate con cURL
Alcune pagine Web e API richiedono l'autenticazione con nome utente e password. Ci sono due modi per farlo. Puoi citare il nome utente e la password con il -u
opzione:
curl -u boolean:world https://example.com/
In alternativa, puoi semplicemente aggiungerlo all'URL stesso, con il <username>:<password>@<host>
sintassi, come mostrato:
curl https://boolean:[email protected]/
In entrambi questi metodi, curl esegue un'autenticazione "Base" con il server.
Test del supporto del protocollo con cURL
Grazie all'ampia gamma di protocolli supportati da cURL, puoi persino usarlo per testare il supporto del protocollo. Se vuoi verificare se un sito supporta una determinata versione di SSL, puoi utilizzare il --sslv<version>
o --tlsv<version>
bandiere. Ad esempio, se desideri verificare se un sito supporta TLS v1.2, puoi utilizzare:
curl -v --tlsv1.2 https://www.booleanworld.com/
La richiesta avviene normalmente, il che significa che il sito supporta TLSv1.2. Ora, controlliamo se il sito supporta SSL v3:
curl -v --sslv3 https://www.booleanworld.com/
Questo comando genera un handshake_failed
errore, perché il server non supporta questa versione di SSL.
Tieni presente che, a seconda del tuo sistema e della versione/configurazione della libreria, alcune di queste opzioni di versione potrebbero non funzionare. L'output sopra è stato preso da cURL di Ubuntu 16.04. Tuttavia, se lo provi con cURL in MacOS 10.14, viene visualizzato un errore:
Puoi anche testare le versioni del protocollo HTTP allo stesso modo, usando i flag --http1.0
, --http1.1
o --http2
.
Impostazione dell'intestazione Host e del --resolve
di cURL opzione
In precedenza, abbiamo discusso di come un server Web sceglie di offrire siti Web diversi ai visitatori a seconda dell'intestazione "Host". Questo può essere molto utile per verificare se il tuo sito web ha un hosting virtuale configurato correttamente, modificando l'intestazione "Host". Ad esempio, supponi di avere un server locale su 192.168.0.1
con due siti Web configurati, ovvero example1.com
e example2.com
. Ora puoi verificare se tutto è configurato correttamente impostando l'intestazione Host e verificando se vengono serviti i contenuti corretti:
curl -H 'Host: example1.com' https://192.168.0.1/ curl -H 'Host: example1.com' https://192.168.0.1/
Sfortunatamente, questo non funziona così bene per i siti Web che utilizzano HTTPS. Un singolo sito Web può essere configurato per servire più siti Web, con ciascun sito Web che utilizza il proprio certificato SSL/TLS. Poiché SSL/TLS si svolge a un livello inferiore rispetto a HTTP, ciò significa che client come cURL devono comunicare al server a quale sito Web stiamo tentando di accedere a livello SSL/TLS, in modo che il server possa scegliere il certificato giusto. Per impostazione predefinita, cURL lo dice sempre al server.
Tuttavia, se desideri inviare una richiesta a un IP specifico come nell'esempio sopra, il server potrebbe scegliere un certificato errato e ciò causerà il fallimento della verifica SSL/TLS. Il Host
header funziona solo a livello HTTP e non a livello SSL/TLS.
Per evitare il problema sopra descritto, puoi utilizzare il --resolve
bandiera. Il flag di risoluzione invierà la richiesta alla porta e all'IP di tua scelta, ma invierà correttamente il nome del sito Web a entrambi i livelli SSL/TLS e HTTP.
Consideriamo l'esempio precedente. Se stavi usando HTTPS e volevi inviarlo al server locale 192.168.0.1
, puoi usare:
curl https://example1.com/ --resolve example1.com:192.168.0.1:443
Funziona bene anche per HTTP. Supponiamo che, se il tuo server HTTP era in servizio sulla porta 8080, puoi utilizzare il --resolve
contrassegnare o impostare manualmente l'intestazione Host e la porta, in questo modo:
curl https://192.168.0.1:8080/ -H 'Host: example1.com:8080' curl https://example.com/ --resolve example1.com:192.168.0.1:8080
I due comandi sopra menzionati sono equivalenti.
Risolvi i domini in indirizzi IPv4 e IPv6
A volte, potresti voler controllare se un sito è raggiungibile sia su IPv4 che su IPv6. Puoi forzare cURL a connettersi alla versione IPv4 o su IPv6 del tuo sito utilizzando il -4
o -6
bandiere.
Tieni presente che un sito Web può essere raggiunto tramite IPv4 e IPv6 solo se:
- Esistono record DNS appropriati per il sito Web che lo collega agli indirizzi IPv4 e IPv6.
- Hai una connettività IPv4 e IPv6 sul tuo sistema.
Ad esempio, se vuoi verificare se riesci a raggiungere il sito web icanchazip.com tramite IPv6, puoi utilizzare:
curl -6 https://icanhazip.com/
Se il sito è raggiungibile tramite HTTPS, dovresti ottenere il tuo indirizzo IPv6 nell'output. Questo sito Web restituisce l'indirizzo IP pubblico di qualsiasi client che si connette ad esso. Quindi, a seconda del protocollo utilizzato, mostra un indirizzo IPv4 o IPv6.
Puoi anche utilizzare il -v
opzione insieme a -4
e -6
per avere maggiori dettagli.
Disabilitazione dei controlli dei certificati di cURL
Per impostazione predefinita, cURL controlla i certificati quando si connette tramite HTTPS. Tuttavia, spesso è utile disabilitare il controllo del certificato, quando si tenta di inviare richieste a siti che utilizzano certificati autofirmati o se è necessario testare un sito con un certificato non configurato correttamente.
Per disabilitare i controlli dei certificati, usa il -k
certificato. Lo verificheremo effettuando una richiesta a scaduto.badssl.com, che è un sito Web che utilizza un certificato SSL scaduto.
curl -k https://expired.badssl.com/
Con il -k
opzione, i controlli del certificato vengono ignorati. Quindi, cURL scarica la pagina e visualizza correttamente il corpo della richiesta. Se invece non hai utilizzato il -k
opzione, riceverai un errore, simile a quello seguente:
Risoluzione dei problemi relativi al sito Web con la "scomposizione dei tempi di cURL"
Potresti imbatterti in situazioni in cui un sito Web è molto lento per te e vorresti approfondire il problema. Puoi fare in modo che cURL visualizzi i dettagli della richiesta, come il tempo impiegato per la risoluzione DNS, la creazione di una connessione ecc. con il -w
opzione. Questo è spesso chiamato come "scomposizione temporale" di cURL.
Ad esempio, se vuoi vedere questi dettagli per la connessione a https://www.booleanworld.com/
, esegui:
curl https://www.booleanworld.com/ -sSo /dev/null -w 'namelookup:t%{time_namelookup}nconnect:t%{time_connect}nappconnect:t%{time_appconnect}npretransfer:t%{time_pretransfer}nredirect:t%{time_redirect}nstarttransfer:t%{time_starttransfer}ntotal:tt%{time_total}n'
(Se lo stai eseguendo da un sistema Windows, cambia il /dev/null
a NUL
).
Otterrai un output simile a questo:
Ciascuno di questi valori è espresso in secondi, ed ecco cosa rappresenta ogni valore:
- ricerca nome — Il tempo necessario per la risoluzione DNS.
- connetti — Il tempo necessario per stabilire la connessione TCP.
- appconnect — Questo è il tempo impiegato per stabilire connessioni per qualsiasi livello tra TCP e il livello dell'applicazione, come SSL/TLS. Nel nostro caso, il livello dell'applicazione è HTTP. Inoltre, se non esiste un tale livello intermedio (come quando c'è una richiesta HTTP diretta), questa volta sarà sempre 0.
- pretrasferimento — Questo è il tempo impiegato dall'inizio a quando sta per iniziare il trasferimento del file.
- reindirizzamento — Questo è il tempo totale impiegato per elaborare eventuali reindirizzamenti.
- starttransfer — Tempo impiegato dall'inizio a quando il primo byte sta per essere trasferito.
- totale — Il tempo totale impiegato da cURL per completare l'intero processo.
Ad esempio, ad esempio, stai riscontrando ritardi nella connessione a un sito Web e noti che il valore "namelookup" era troppo alto. Poiché ciò indica un problema con il server DNS del tuo ISP, potresti iniziare a esaminare il motivo per cui la ricerca DNS è così lenta e passare a un altro server DNS, se necessario.
File di configurazione cURL
A volte, potresti voler fare in modo che tutte le richieste cURL utilizzino le stesse opzioni. Passare queste opzioni a mano non è una soluzione fattibile, quindi cURL ti consente di specificare le opzioni in un file di configurazione.
Il file di configurazione predefinito si trova in ~/.curlrc
in Linux/MacOS e %appdata%_curlrc
in Windows. All'interno di questo file, puoi specificare tutte le opzioni di cui hai bisogno, come:
# Always use IPv4 -4 # Always show verbose output -v # When following a redirect, automatically set the previous URL as referer. referer = ";auto" # Wait 60 seconds before timing out. connect-timeout = 60
Dopo aver creato il file sopra, prova a fare una richiesta con curl example.com
. Scoprirai che queste opzioni hanno avuto effetto.
Se desideri utilizzare un file di configurazione personalizzato anziché quello predefinito, puoi utilizzare -K
opzione per puntare curl al tuo file di configurazione. Ad esempio, se hai un file di configurazione chiamato config.txt
, quindi puoi usarlo con:
curl -K config.txt example.com
Conclusione
In questo articolo abbiamo trattato gli usi più comuni del comando cURL. Naturalmente, questo articolo graffia solo la superficie e cURL può fare molte altre cose. Puoi digitare man curl
nel tuo terminale o semplicemente visita questa pagina per vedere la pagina man che elenca tutte le opzioni.