cURL, abbreviazione di "Client for URLs", è uno strumento a riga di comando per il trasferimento di dati utilizzando vari protocolli. Questo articolo mira a fornire i comandi ampiamente utilizzati e come riferimento pratico.
Sommario
- Scarica un singolo file
- Salva l'output di cURL in un file
- Nascondi barra di avanzamento
- Recupera più file alla volta
- Segui le intestazioni di posizione HTTP con l'opzione -L
- Continua/Riprendi un download precedente
- Utilizza un proxy con o senza autenticazione
- Interroga intestazioni HTTP
- Carica file su server FTP
- Scarica file dal server FTP
- Elenca/scarica utilizzando gli intervalli
- Maggiori informazioni sull'utilizzo dell'opzione Verbose and Trace
- Invia posta utilizzando il protocollo SMTP
- Verifica supporto HTTP/2
- Simula metodi HTTP
- Fai una richiesta POST con i parametri
- Conclusione
Puoi invocare curl
comando dal tuo terminale senza pensare a come installarlo, poiché è preinstallato sulla maggior parte dei sistemi operativi basati su Linux.
Esistono molti casi d'uso per curl, come:
- Caricamento FTP
- Supporto proxy
- Connessioni SSL
- Post HTTP
cURL supporta anche l'uso di tutti 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 e TFTP.
Scarica un singolo file
Il comando seguente otterrà il contenuto dell'URL e lo visualizzerà nello STDOUT (cioè sul tuo terminale).
curl https://www.gnu.org
Per memorizzare l'output in un file, devi reindirizzarlo come mostrato di seguito. Verranno visualizzate anche alcune statistiche di download aggiuntive.
curl https://www.gnu.org > gnu-org.html
Salva l'output di cURL in un file
Possiamo salvare il risultato del comando cURL in un file usando -o
/-O
opzioni.
-o
(o minuscola) il risultato verrà salvato nel nome del file fornito nella riga di comando-O
(O maiuscola) verrà preso il nome del file nell'URL e verrà utilizzato come nome del file per memorizzare il risultato
curl -o my-gettext.html https://www.gnu.org/software/gettext/manual/gettext.html
Di conseguenza, ora la pagina gettext.html
verrà salvato nel file denominato my-gettext.html
. Inoltre puoi notare che quando esegui cURL con -o
opzione, visualizza l'indicatore di avanzamento per il download come segue.
Quando usi cURL -O
, salverà il contenuto nel file denominato "gettext.html" stesso nella macchina locale.
curl -O http://www.gnu.org/software/gettext/manual/gettext.html
Nota:quando curl
deve scrivere i dati sul terminale, disabilita il Progress Meter, per evitare confusione nella stampa. Possiamo usare >
, -o
, -O
opzioni per spostare il risultato in un file.
Nascondi barra di avanzamento
cURL per impostazione predefinita mostra la barra di avanzamento. Per nasconderlo -s
(--silent
)è possibile utilizzare l'opzione.
curl -s -O http://www.gnu.org/software/gettext/manual/gettext.html
Se per qualche motivo non funziona sulla tua piattaforma, puoi sempre reindirizzare stderr a /dev/null
:
curl -O http://www.gnu.org/software/gettext/manual/gettext.html 2>/dev/null
Recupera più file alla volta
Naturalmente, possiamo scaricare più file in una singola ripresa specificando gli URL sulla riga di comando.
curl -O https://www.gnu.org/software/gettext/manual/html_node/index.html -O https://www.gnu.org/software/gettext/manual/gettext.html
Segui le intestazioni di posizione HTTP con l'opzione -L
Tuttavia, per impostazione predefinita, cURL non segue le intestazioni della posizione HTTP. Viene anche chiamato reindirizzamenti. Quando una pagina Web richiesta viene spostata in un altro luogo, verrà inviata un'intestazione di posizione HTTP come risposta e indicherà la posizione in cui si trova la pagina Web effettiva.
Possiamo insistere con cURL per seguire il reindirizzamento usando -L
opzione, come mostrato di seguito.
curl -L https://www.google.com
Continua/Riprendi un download precedente
Usando cURL -C
opzione, puoi continuare un download che è stato già interrotto per qualche motivo. Ciò sarà utile quando scarichi file di grandi dimensioni e il download è stato interrotto.
Se diciamo -C -
, quindi cURL troverà da dove iniziare a riprendere il download. Possiamo anche fornire un offset -C <offset>
. I byte di offset forniti verranno ignorati dall'inizio per il file di origine.
Avvia un grande download usando curl
e premi Ctrl-C
per interromperlo tra un download e l'altro.
curl -O https://www.gnu.org/software/gettext/manual/gettext.html
Usando curl -C -
, possiamo continuare il download da dove era stato interrotto in precedenza.
curl -C - -O https://www.gnu.org/software/gettext/manual/gettext.html
Utilizza un proxy con o senza autenticazione
Se sei dietro un server proxy in ascolto sulla porta 8080 su proxy.tuodominio.com, procedi nel seguente modo:
curl -x proxy.yourdomain.com:8080 -U user:password -O https://www.gnu.org/software/gettext/manual/gettext.html
dove puoi saltare -U user:password
se il tuo proxy non richiede l'autenticazione.
Interroga intestazioni HTTP
Le intestazioni HTTP consentono al server web remoto di inviare informazioni aggiuntive su se stesso insieme alla richiesta effettiva. Inoltre, questo fornisce al cliente i dettagli su come viene gestita la richiesta.
Per eseguire query sulle intestazioni HTTP da un sito Web, eseguire:
curl -I https://www.gnu.org
HTTP/1.1 200 OK
Date: Mon, 13 Jul 2020 21:22:32 GMT
Server: Apache/2.4.7
Content-Location: home.html
Vary: negotiate,accept-language,Accept-Encoding
TCN: choice
Strict-Transport-Security: max-age=63072000
Access-Control-Allow-Origin: (null)
Accept-Ranges: bytes
Cache-Control: max-age=0
Expires: Mon, 13 Jul 2020 21:22:32 GMT
Content-Type: text/html
Content-Language: en
Carica file su server FTP
cURL può essere utilizzato anche per caricare file sul server FTP con -T
opzione.
curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.server.com
Di conseguenza, il comando precedente caricherà il file denominato myfile.txt
al server FTP. Puoi anche caricare più file contemporaneamente utilizzando le operazioni sull'intervallo.
curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.server.com
Opzionalmente possiamo usare .
per ottenere l'input da STDIN e trasferirlo al telecomando.
curl -u ftpuser:ftppass -T - ftp://ftp.server.com/mynewfile.txt
Il comando precedente otterrà l'input dall'utente da Standard Input e salverà il contenuto nel server ftp con il nome mynewfile.txt
.
Puoi fornire un -T
per ogni URL e la coppia specifica cosa caricare dove.
Scarica file dal server FTP
cURL può essere utilizzato anche per scaricare file da server FTP. Se il percorso FTP specificato è una directory, per impostazione predefinita elencherà i file nella directory specifica.
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/mysql.php
Il comando sopra scaricherà il mysql.php
file dal server ftp e salvarlo nella directory locale.
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/
Qui, l'URL fornito si riferisce a una directory. Quindi cURL elencherà tutti i file e le directory sotto l'URL specificato.
Elenca/Scarica utilizzando gli intervalli
cURL supporta gli intervalli da fornire nell'URL. Quando viene fornito un intervallo, verranno scaricati i file corrispondenti all'interno dell'intervallo. Sarà utile scaricare i pacchetti dai siti mirror FTP.
curl http://ftp.us.debian.org/debian/pool/main/[a-z]/
Il comando precedente elencherà tutti i pacchetti da a-z
intervalli nel terminale.
Maggiori informazioni sull'utilizzo dell'opzione Verbose and Trace
Puoi scoprire cosa sta succedendo usando il -v
opzione. Questa opzione abilita la modalità dettagliata e stamperà i dettagli.
curl -v https://www.gnu.org
Il comando about produrrà quanto segue:
* Trying 209.51.188.148:443...
* Connected to www.gnu.org (209.51.188.148) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: CN=emacs.org
* start date: Jun 17 09:07:40 2020 GMT
* expire date: Sep 15 09:07:40 2020 GMT
* subjectAltName: host "www.gnu.org" matched cert's "www.gnu.org"
* issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
* SSL certificate verify ok.
> GET / HTTP/1.1
> Host: www.gnu.org
> User-Agent: curl/7.71.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 13 Jul 2020 21:56:04 GMT
< Server: Apache/2.4.7
< Content-Location: home.html
< Vary: negotiate,accept-language,Accept-Encoding
< TCN: choice
< Strict-Transport-Security: max-age=63072000
< Access-Control-Allow-Origin: (null)
< Accept-Ranges: bytes
< Cache-Control: max-age=0
< Expires: Mon, 13 Jul 2020 21:56:04 GMT
< Transfer-Encoding: chunked
< Content-Type: text/html
< Content-Language: en
<
...
Invia posta utilizzando il protocollo SMTP
cURL può essere utilizzato anche per inviare posta utilizzando il protocollo SMTP. È necessario specificare l'indirizzo da, l'indirizzo e l'indirizzo IP del server di posta come mostrato di seguito.
curl --mail-from [email protected] --mail-rcpt [email protected] smtp://mailserver.com
Una volta inserito il comando sopra, attenderà che l'utente fornisca i dati alla posta. Dopo aver composto il tuo messaggio, digita .
(punto) come ultima riga, che invierà immediatamente l'e-mail.
Verifica supporto HTTP/2
Se hai l'ultima versione di cURL, puoi utilizzare il --http2
opzione per verificare se un determinato URL supporta il nuovo protocollo HTTP/2. Pertanto, se il sito supporta HTTP/2, vedrai HTTP/2.0 200
nell'intestazione invece di HTTP/1.1 200
.
curl -I --http2 https://www.opensource.com
Simula metodi HTTP
Il GET
viene utilizzato per recuperare risorse da un determinato URL. Il semplice curl https://www.gnu.org/
il comando utilizzerà GET
come metodo HTTP predefinito, tuttavia può anche essere specificato utilizzando --request GET
o -X GET
.
curl --request GET https://www.gnu.org
Il POST
viene utilizzato per pubblicare informazioni su un server Web (ad esempio un commento su un forum). Questo può essere specificato utilizzando --request POST
o -X POST
.
curl --request POST https://yourwebsite.com
Il DELETE
il metodo elimina la risorsa dal server Web associato a un URL specifico. Questo può essere specificato utilizzando --request DELETE
o -X DELETE
.
curl --request DELETE https://yourwebsite.com
Il PUT
il metodo crea o sostituisce una risorsa in base ai dati che il client invia al server web. (es. creazione di una nuova pagina web o aggiornamento di una esistente). Questo può essere specificato utilizzando --request PUT
o -X PUT
.
curl --request PUT https://yourwebsite.com
Fai una richiesta POST con parametri
Il comando seguente invierà il animal1
e animal2
parametri, insieme ai valori corrispondenti, a https://yourdomain.com/animals.php
curl --request POST --data "animal1=cat&animal2=dog" https://yourdomain.com/animals.php
Puoi utilizzare questo suggerimento per simulare il comportamento di un normale modulo HTML.
Conclusione
In questo post abbiamo spiegato che cos'è cURL e cosa puoi fare con alcuni comandi di base. Per ulteriori informazioni su cURL, puoi visitare il sito web del progetto.