cURL è un pacchetto software che consiste in uno strumento da riga di comando e una libreria per il trasferimento di dati utilizzando la sintassi degli URL.
cURL supporta vari protocolli come DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet e TFTP.
Questo articolo fornisce 15 esempi pratici di utilizzo di cURL.
1. Scarica un singolo file
Il comando seguente otterrà il contenuto dell'URL e lo visualizzerà nello STDOUT (cioè sul tuo terminale).
$ curl http://www.centos.org
Per memorizzare l'output in un file, devi reindirizzarlo come mostrato di seguito. Verranno visualizzate anche alcune statistiche di download aggiuntive.
$ curl http://www.centos.org > centos-org.html % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 27329 0 27329 0 0 104k 0 --:--:-- --:--:-- --:--:-- 167k
2. Salva l'output di cURL in un file
Possiamo salvare il risultato del comando curl in un file usando le opzioni -o/-O.
- -o (o minuscola) il risultato verrà salvato nel nome 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 mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html
Ora la pagina gettext.html verrà salvata nel file chiamato 'mygettext.html'. Puoi anche notare che quando esegui curl con l'opzione -o, mostra l'indicatore di avanzamento per il download come segue.
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 66 1215k 66 805k 0 0 33060 0 0:00:37 0:00:24 0:00:13 45900 100 1215k 100 1215k 0 0 39474 0 0:00:31 0:00:31 --:--:-- 68987
Quando usi curl -O (O maiuscola), salverà il contenuto nel file chiamato "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 l'indicatore di avanzamento, per evitare confusione nella stampa. Possiamo usare le opzioni '>'|'-o'|'-O' per spostare il risultato in un file.
Simile a cURL, puoi anche usare wget per scaricare file. Fare riferimento agli esempi di wget per capire come utilizzare wget in modo efficace.
3. Recupera più file alla volta
Possiamo scaricare più file in una singola ripresa specificando gli URL sulla riga di comando.
Sintassi:
$ curl -O URL1 -O URL2
Il comando seguente scaricherà sia index.html che gettext.html e lo salverà con lo stesso nome nella directory corrente.
$ curl -O http://www.gnu.org/software/gettext/manual/html_node/index.html -O http://www.gnu.org/software/gettext/manual/gettext.html
Tieni presente che quando scarichiamo più file dallo stesso server come mostrato sopra, curl tenterà di riutilizzare la connessione.
4. Segui le intestazioni della posizione HTTP con l'opzione -L
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 della pagina Web effettiva.
Ad esempio, quando qualcuno digita google.com nel browser dall'India, verrà automaticamente reindirizzato a "google.co.in". Questo viene fatto in base all'intestazione della posizione HTTP come mostrato di seguito.
$ curl http://www.google.com <TITLE>302 Moved</TITLE> <H1>302 Moved</H1> The document has moved <A HREF="http://www.google.co.in/">here</A>
L'output sopra indica che il documento richiesto è stato spostato su "http://www.google.co.in/".
Possiamo insistere con curl per seguire il reindirizzamento usando l'opzione -L, come mostrato di seguito. Ora scaricherà il codice sorgente html di google.co.in.
$ curl -L http://www.google.com
5. Continua/Riprendi un download precedente
Usando l'opzione curl -C, 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 -', curl troverà da dove iniziare a riprendere il download. Possiamo anche dare un offset '-C
Avvia un grande download usando curl e premi Ctrl-C per interromperlo tra un download e l'altro.
$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html ############## 20.1%
Nota:-# viene utilizzato per visualizzare una barra di avanzamento anziché un indicatore di avanzamento.
Ora il download di cui sopra è stato interrotto al 20,1%. Usando "curl -C -", possiamo continuare il download da dove era stato interrotto in precedenza. Ora il download continua dal 20,1%.
curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html ############### 21.1%
6. Limita la velocità di trasferimento dei dati
Puoi limitare la quantità di trasferimento dei dati utilizzando l'opzione –limit-rate. Puoi specificare la velocità di trasferimento massima come argomento.
$ curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html
Il comando precedente limita il trasferimento dei dati a 1000 byte/secondo. curl può utilizzare una velocità di trasferimento più elevata per un breve lasso di tempo. Ma in media, arriverà a circa 1000B/secondo.
Quello che segue era l'indicatore di avanzamento per il comando precedente. Puoi vedere che la velocità attuale è vicina ai 1000 byte.
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 1 1215k 1 13601 0 0 957 0 0:21:40 0:00:14 0:21:26 999 1 1215k 1 14601 0 0 960 0 0:21:36 0:00:15 0:21:21 999 1 1215k 1 15601 0 0 962 0 0:21:34 0:00:16 0:21:18 999
7. Scarica un file solo se è stato modificato prima/dopo il tempo indicato
Possiamo ottenere i file che vengono modificati dopo un determinato periodo di tempo usando l'opzione -z in curl. Funzionerà sia per FTP che per HTTP.
$ curl -z 21-Dec-11 http://www.example.com/yy.html
Il comando precedente scaricherà yy.html solo se viene modificato dopo la data e l'ora specificate
$ curl -z -21-Dec-11 http://www.example.com/yy.html
Il comando precedente scaricherà yy.html, se viene modificato prima della data e dell'ora specificate.
Si prega di fare riferimento a "man curl_getdate" per le varie sintassi supportate per l'espressione di data
8. Supera l'autenticazione HTTP in cURL
A volte, i siti Web richiederanno un nome utente e una password per visualizzare il contenuto (può essere fatto con il file .htaccess). Con l'aiuto dell'opzione -u, possiamo passare quelle credenziali da cURL al server web come mostrato di seguito.
$ curl -u username:password URL
Nota:per impostazione predefinita curl utilizza l'autenticazione HTTP di base. Possiamo specificare un altro metodo di autenticazione usando –ntlm | –digerire.
9. 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/xss.php
Il comando precedente scaricherà il file xss.php dal server ftp e lo salverà 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
Se non conosci FTP/sFTP, fai riferimento al tutorial ftp sftp per principianti.
10. 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 ftp://ftp.uk.debian.org/debian/pool/main/[a-z]/
Il comando precedente elencherà tutti i pacchetti dagli intervalli a-z nel terminale.
11. Carica file su server FTP
Curl può essere utilizzato anche per caricare file sul server FTP con l'opzione -T.
$ curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com
Il comando precedente caricherà il file denominato myfile.txt sul server FTP. Puoi anche caricare più file contemporaneamente utilizzando le operazioni sull'intervallo.
$ curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com
Opzionalmente possiamo usare "." per ottenere l'input da STDIN e trasferirlo al telecomando.
$ curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt
Il comando precedente otterrà l'input dall'utente da Standard Input e salverà i contenuti nel server ftp con il nome "myfile_1.txt".
Puoi fornire una "-T" per ogni URL e la coppia specifica cosa caricare e dove.
12. Ulteriori informazioni utilizzando l'opzione Verbose and Trace
Puoi sapere cosa sta succedendo usando l'opzione -v. -v opzione abilita la modalità dettagliata e stamperà i dettagli
curl -v http://google.co.in
Il comando about produrrà quanto segue
* About to connect() to www.google.co.in port 80 (#0) * Trying 74.125.236.56... connected * Connected to www.google.co.in (74.125.236.56) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.21.0 (i486-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6 > Host: www.google.co.in > Accept: */* > * HTTP 1.0, assume close after body < HTTP/1.0 200 OK < Date: Tue, 10 Apr 2012 11:18:39 GMT < Expires: -1 < Cache-Control: private, max-age=0 < Content-Type: text/html; charset=ISO-8859-1 < Set-Cookie: PREF=ID=7c497a6b15cc092d:FF=0:TM=1334056719:LM=1334056719:S=UORpBwxFmTRkbXLj; expires=Thu, 10-Apr-2014 11:18:39 GMT; path=/; domain=.google.co.in . .
Se hai bisogno di informazioni più dettagliate, puoi usare l'opzione –trace. L'opzione di traccia abiliterà un dump di traccia completo di tutti i dati in entrata/in uscita nel file specificato
=> Send header, 169 bytes (0xa9) 0000: 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a GET / HTTP/1.1.. 0010: 55 73 65 72 2d 41 67 65 6e 74 3a 20 63 75 72 6c User-Agent: curl .. 0060: 2e 32 2e 33 2e 34 20 6c 69 62 69 64 6e 2f 31 2e .2.3.4 libidn/1.
0070: 31 35 20 6c 69 62 73 73 68 32 2f 31 2e 32 2e 36 15 libssh2/1.2.6 0080: 0d 0a 48 6f 73 74 3a 20 77 77 77 2e 67 6f 6f 67 ..Host: www.goog 0090: 6c 65 2e 63 6f 2e 69 6e 0d 0a 41 63 63 65 70 74 le.co.in..Accept 00a0: 3a 20 2a 2f 2a 0d 0a 0d 0a : */*.... == Info: HTTP 1.0, assume close after body <= Recv header, 17 bytes (0x11) 0000: 48 54 54 50 2f 31 2e 30 20 32 30 30 20 4f 4b 0d HTTP/1.0 200 OK. 0010: 0a
Questa opzione dettagliata e traccia tornerà utile quando l'arricciatura non riesce per qualche motivo e non sappiamo perché.
13. Ottieni la definizione di una parola usando il protocollo DICT
È possibile utilizzare cURL per ottenere la definizione di una parola con l'aiuto del protocollo DICT. Dobbiamo passargli un URL del server del dizionario.
$ curl dict://dict.org/d:bash
Il comando precedente elencherà il significato di bash come segue
151 "Bash" gcide "The Collaborative International Dictionary of English v.0.48" Bash \Bash\, v. t. [imp. & p. p. {Bashed}; p. pr. & vb. n. {Bashing}.] [Perh. of imitative origin; or cf. Dan. baske to strike, bask a blow, Sw. basa to beat, bas a beating.] To strike heavily; to beat; to crush. [Prov. Eng. & Scot.] --Hall Caine. [1913 Webster] Bash her open with a rock. --Kipling. [Webster 1913 Suppl.] . 151 "Bash" gcide "The Collaborative International Dictionary of English v.0.48" Bash \Bash\, n. 1. a forceful blow, especially one that does damage to its target. [PJC] . .
Ora puoi vedere che utilizza "The Collaborative International Dictionary of English". Ci sono molti dizionari sono disponibili. Possiamo elencare tutti i dizionari usando
$ curl dict://dict.org/show:db jargon "The Jargon File (version 4.4.7, 29 Dec 2003)" foldoc "The Free On-line Dictionary of Computing (26 July 2010)" easton "Easton's 1897 Bible Dictionary" hitchcock "Hitchcock's Bible Names Dictionary (late 1800's)" bouvier "Bouvier's Law Dictionary, Revised 6th Ed (1856)"
Ora, per trovare il vero significato di Bash nel computer, possiamo cercare bash nel dizionario "foldoc" come segue
$ curl dict://dict.org/d:bash:foldoc
Il risultato sarà,
bash Bourne Again SHell. {GNU}'s {command interpreter} for {Unix}. Bash is a {Posix}-compatible {shell} with full {Bourne shell} syntax, and some {C shell} commands built in. The Bourne Again Shell supports {Emacs}-style command-line editing, job control, functions, and on-line help. Written by Brian Fox of {UCSB}.
Per maggiori dettagli in merito a DICT, leggere RFC2229
14. Usa proxy per scaricare un file
Possiamo specificare cURL per utilizzare il proxy per eseguire l'operazione specifica usando l'opzione -x. Dobbiamo specificare l'host e la porta del proxy.
$ curl -x proxysever.test.com:3128 http://google.co.in
15. 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.
Subject: Testing This is a test mail .