cURL je softwarový balíček, který se skládá z nástroje příkazového řádku a knihovny pro přenos dat pomocí syntaxe URL.
cURL podporuje různé protokoly jako DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet a TFTP.
Tento článek poskytuje 15 praktických příkladů použití cURL.
1. Stáhnout jeden soubor
Následující příkaz získá obsah adresy URL a zobrazí ji ve STDOUT (tj. na vašem terminálu).
$ curl http://www.centos.org
Chcete-li výstup uložit do souboru, přesměrujte jej, jak je uvedeno níže. Zobrazí se také některé další statistiky stahování.
$ 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. Uložte výstup cURL do souboru
Výsledek příkazu curl můžeme uložit do souboru pomocí voleb -o/-O.
- -o (malé o) výsledek bude uložen pod názvem souboru zadaným v příkazovém řádku
- -O (velké O) bude použit název souboru v adrese URL a bude použit jako název souboru pro uložení výsledku
$ curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html
Nyní bude stránka gettext.html uložena do souboru s názvem ‚mygettext.html‘. Můžete si také všimnout, že při spuštění curl s volbou -o se zobrazí ukazatel průběhu stahování následovně.
% 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
Když použijete curl -O (velké O), uloží se obsah do samotného souboru s názvem ‚gettext.html‘ v místním počítači.
$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html
Poznámka:Když curl musí zapsat data do terminálu, deaktivuje měřič průběhu, aby se předešlo zmatkům při tisku. K přesunutí výsledku do souboru můžeme použít volby '>'|'-o'|'-O'.
Podobně jako u cURL můžete také použít wget ke stažení souborů. Podívejte se na příklady wget, abyste pochopili, jak efektivně používat wget.
3. Načíst více souborů najednou
Zadáním adres URL na příkazovém řádku můžeme stáhnout více souborů najednou.
Syntaxe:
$ curl -O URL1 -O URL2
Níže uvedený příkaz stáhne index.html i gettext.html a uloží jej pod stejným názvem do aktuálního adresáře.
$ curl -O http://www.gnu.org/software/gettext/manual/html_node/index.html -O http://www.gnu.org/software/gettext/manual/gettext.html
Vezměte prosím na vědomí, že když stahujeme více souborů ze stejného serveru, jak je uvedeno výše, curl se pokusí znovu použít připojení.
4. Postupujte podle záhlaví umístění HTTP s volbou -L
Ve výchozím nastavení se CURL neřídí hlavičkami umístění HTTP. Označuje se také jako přesměrování. Když se požadovaná webová stránka přesune na jiné místo, bude jako odpověď odeslána hlavička umístění HTTP a bude tam, kde se skutečná webová stránka nachází.
Když například někdo zadá do prohlížeče google.com z Indie, bude automaticky přesměrován na „google.co.in“. To se provádí na základě záhlaví HTTP Location, jak je znázorněno níže.
$ 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>
Výše uvedený výstup říká, že požadovaný dokument se přesune na „http://www.google.co.in/“.
Můžeme trvat na tom, aby curl následoval přesměrování pomocí volby -L, jak je znázorněno níže. Nyní stáhne zdrojový kód HTML google.co.in.
$ curl -L http://www.google.com
5. Pokračovat/obnovit předchozí stahování
Pomocí volby curl -C můžete pokračovat ve stahování, které již bylo z nějakého důvodu zastaveno. To bude užitečné, když stahujete velké soubory a stahování bylo přerušeno.
Řekneme-li „-C -“, curl najde, odkud má začít obnovovat stahování. Můžeme také zadat offset ‚-C
Spusťte velké stahování pomocí curl a mezi stahováním jej zastavíte stisknutím Ctrl-C.
$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html ############## 20.1%
Poznámka:-# se používá k zobrazení ukazatele průběhu místo ukazatele postupu.
Nyní bylo výše uvedené stahování zastaveno na 20,1 %. Pomocí „curl -C -“ můžeme pokračovat ve stahování tam, kde skončilo dříve. Nyní stahování pokračuje z 20,1 %.
curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html ############### 21.1%
6. Omezte rychlost přenosu dat
Pomocí možnosti –limit-rate můžete omezit množství přenášených dat. Jako argument můžete zadat maximální přenosovou rychlost.
$ curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html
Výše uvedený příkaz omezuje přenos dat na 1000 bajtů/sekundu. curl může po krátkou dobu použít vyšší přenosovou rychlost. Ale v průměru to bude kolem 1000 B/s.
Následuje ukazatel průběhu pro výše uvedený příkaz. Můžete vidět, že aktuální rychlost se blíží 1000 bajtů.
% 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. Stahujte soubor pouze v případě, že je upraven před/po daném čase
Soubory, které jsou změněny po určité době, můžeme získat pomocí volby -z v curl. To bude fungovat pro FTP i HTTP.
$ curl -z 21-Dec-11 http://www.example.com/yy.html
Výše uvedený příkaz stáhne soubor yy.html pouze v případě, že bude upraven později než zadané datum a čas
$ curl -z -21-Dec-11 http://www.example.com/yy.html
Výše uvedený příkaz stáhne soubor yy.html, pokud je změněn před daným datem a časem.
Různé syntaxe podporované pro výraz data naleznete v ‘man curl_getdate’
8. Předejte HTTP ověřování v cURL
Někdy budou webové stránky vyžadovat uživatelské jméno a heslo pro zobrazení obsahu (lze to provést pomocí souboru .htaccess). S pomocí volby -u můžeme předat tyto přihlašovací údaje z cURL na webový server, jak je znázorněno níže.
$ curl -u username:password URL
Poznámka:Ve výchozím nastavení curl používá základní ověřování HTTP. Další autentizační metodu můžeme zadat pomocí –ntlm | – trávení.
9. Stáhnout soubory z FTP serveru
cURL lze také použít ke stahování souborů z FTP serverů. Pokud je daná cesta FTP adresář, ve výchozím nastavení bude seznam souborů v konkrétním adresáři.
$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php
Výše uvedený příkaz stáhne soubor xss.php z ftp serveru a uloží jej do místního adresáře.
$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/
Zde daná adresa URL odkazuje na adresář. Takže cURL vypíše všechny soubory a adresáře pod danou URL
Pokud s FTP/sFTP začínáte, podívejte se na ftp sftp tutoriál pro začátečníky.
10. Seznam/stažení pomocí rozsahů
cURL podporuje rozsahy, které mají být uvedeny v URL. Po zadání rozsahu budou staženy soubory odpovídající rozsahu. Bude užitečné stáhnout balíčky z FTP mirrorů.
$ curl ftp://ftp.uk.debian.org/debian/pool/main/[a-z]/
Výše uvedený příkaz vypíše všechny balíčky z rozsahů a-z v terminálu.
11. Nahrajte soubory na server FTP
Curl lze také použít k nahrávání souborů na FTP server s volbou -T.
$ curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com
Výše uvedený příkaz nahraje soubor s názvem myfile.txt na FTP server. Můžete také nahrát více souborů současně pomocí operací rozsahu.
$ curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com
Volitelně můžeme použít "." pro získání vstupu ze STDIN a přenos do dálkového ovladače.
$ curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt
Výše uvedený příkaz získá vstup od uživatele ze standardního vstupu a uloží obsah na ftp server pod názvem „myfile_1.txt“.
Pro každou adresu URL můžete zadat jedno „-T“ a dvojice určuje, co kam nahrát.
12. Další informace pomocí možnosti Verbose and Trace Option
Co se děje, můžete zjistit pomocí volby -v. Volba -v povolí podrobný režim a vytiskne podrobnosti
curl -v http://google.co.in
Příkaz about vypíše následující
* 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 . .
Pokud potřebujete podrobnější informace, můžete použít volbu –trace. Možnost trace umožní úplný výpis trasování všech příchozích/odchozích dat do daného souboru
=> 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
Tato možnost podrobného a trasování se bude hodit, když curl z nějakého důvodu selže a my nevíme proč.
13. Získejte definici slova pomocí protokolu DICT
Pomocí cURL můžete získat definici slova pomocí protokolu DICT. Musíme mu předat adresu URL slovníkového serveru.
$ curl dict://dict.org/d:bash
Výše uvedený příkaz vypíše význam bash následovně
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] . .
Nyní můžete vidět, že používá „The Collaborative International Dictionary of English“. K dispozici je mnoho slovníků. Všechny slovníky můžeme vypsat pomocí
$ 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)"
Nyní, abychom našli skutečný význam Bash v počítači, můžeme hledat bash ve slovníku „Foloc“ následovně
$ curl dict://dict.org/d:bash:foldoc
Výsledkem bude,
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}.
Další podrobnosti týkající se DICT naleznete v RFC2229
14. Ke stažení souboru použijte proxy
Můžeme zadat cURL pro použití proxy k provedení konkrétní operace pomocí volby -x. Musíme zadat hostitele a port proxy.
$ curl -x proxysever.test.com:3128 http://google.co.in
15. Odesílání pošty pomocí protokolu SMTP
cURL lze také použít k odesílání pošty pomocí protokolu SMTP. Měli byste zadat adresu odesílatele, příjemce a ip-adresu poštovního serveru, jak je uvedeno níže.
$ curl --mail-from [email protected] --mail-rcpt [email protected] smtp://mailserver.com
Po zadání výše uvedeného příkazu bude čekat, až uživatel poskytne data e-mailu. Po vytvoření zprávy zadejte . (tečka) jako poslední řádek, který e-mail okamžitě odešle.
Subject: Testing This is a test mail .