cURL, zkratka pro „Client for URLs“, je nástroj příkazového řádku pro přenos dat pomocí různých protokolů. Tento článek si klade za cíl poskytnout příkazy, které jsou široce používané, a slouží jako praktický odkaz.
Obsah
- Stáhnout jeden soubor
- Uložte výstup cURL do souboru
- Skrýt ukazatel průběhu
- Načíst více souborů najednou
- Sledujte záhlaví umístění HTTP s volbou -L
- Pokračovat/obnovit předchozí stahování
- Používejte proxy s ověřením nebo bez něj
- Dotaz na záhlaví HTTP
- Nahrát soubory na server FTP
- Stahování souborů ze serveru FTP
- Seznam/stažení pomocí rozsahů
- Další informace o možnostech podrobného a trasování
- Odesílání pošty pomocí protokolu SMTP
- Kontrola podpory HTTP/2
- Simulujte metody HTTP
- Zadejte požadavek POST s parametry
- Závěr
Můžete vyvolat curl
příkaz z vašeho terminálu, aniž byste přemýšleli o způsobech jeho instalace, protože je předinstalovaný na většině operačních systémů založených na Linuxu.
Existuje velké množství případů použití pro curl, jako například:
- Nahrání FTP
- Podpora proxy
- Připojení SSL
- Příspěvek HTTP
cURL také podporuje použití všech následujících protokolů:DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP , SMTPS, TELNET a TFTP.
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 https://www.gnu.org
Chcete-li výstup uložit do souboru, přesměrujte jej, jak je znázorněno níže. Zobrazí se také některé další statistiky stahování.
curl https://www.gnu.org > gnu-org.html
Uložit výstup cURL do souboru
Výsledek příkazu cURL můžeme uložit do souboru pomocí -o
/-O
možnosti.
-o
(malé o) výsledek bude uložen pod názvem souboru zadaným v příkazovém řádku-O
(velké O) název souboru v URL bude převzat a bude použit jako název souboru pro uložení výsledku
curl -o my-gettext.html https://www.gnu.org/software/gettext/manual/gettext.html
Výsledkem je nyní stránka gettext.html
se uloží do souboru s názvem my-gettext.html
. Také si můžete všimnout, že při spuštění cURL s -o
zobrazí indikátor průběhu stahování následovně.
Když používáte cURL -O
, uloží obsah do samotného souboru s názvem ‚gettext.html‘ na místním počítači.
curl -O http://www.gnu.org/software/gettext/manual/gettext.html
Poznámka:Když se curl
musí zapsat data do terminálu, deaktivuje měřič pokroku, aby se předešlo zmatkům při tisku. Můžeme použít >
, -o
, -O
možnosti přesunout výsledek do souboru.
Skrýt ukazatel průběhu
cURL ve výchozím nastavení zobrazuje ukazatel průběhu. Chcete-li jej skrýt, -s
(--silent
) lze použít.
curl -s -O http://www.gnu.org/software/gettext/manual/gettext.html
Pokud to z nějakého důvodu na vaší platformě nefunguje, můžete vždy přesměrovat stderr na /dev/null
:
curl -O http://www.gnu.org/software/gettext/manual/gettext.html 2>/dev/null
Načíst více souborů najednou
Samozřejmě můžeme stáhnout více souborů najednou zadáním adres URL na příkazovém řádku.
curl -O https://www.gnu.org/software/gettext/manual/html_node/index.html -O https://www.gnu.org/software/gettext/manual/gettext.html
Sledovat záhlaví umístění HTTP s možností -L
Ve výchozím nastavení se však 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í.
Můžeme trvat na tom, aby cURL následovalo přesměrování pomocí -L
možnost, jak je uvedeno níže.
curl -L https://www.google.com
Pokračovat/obnovit předchozí stahování
Pomocí 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 -
, pak cURL najde, odkud začít obnovovat stahování. Můžeme také zadat offset -C <offset>
. Dané offsetové bajty budou u zdrojového souboru přeskočeny od začátku.
Zahajte velké stahování pomocí curl
a stiskněte Ctrl-C
pro zastavení mezi stahováním.
curl -O https://www.gnu.org/software/gettext/manual/gettext.html
Pomocí curl -C -
, můžeme pokračovat ve stahování od místa, kde skončilo dříve.
curl -C - -O https://www.gnu.org/software/gettext/manual/gettext.html
Použít proxy s ověřením nebo bez něj
Pokud jste za proxy serverem naslouchajícím na portu 8080 na adrese proxy.yourdomain.com, postupujte takto:
curl -x proxy.yourdomain.com:8080 -U user:password -O https://www.gnu.org/software/gettext/manual/gettext.html
kde můžete přeskočit -U user:password
pokud váš proxy nevyžaduje ověření.
Dotaz na záhlaví HTTP
Záhlaví HTTP umožňuje vzdálenému webovému serveru odeslat další informace o sobě spolu se skutečným požadavkem. Kromě toho poskytuje klientovi podrobnosti o tom, jak je požadavek vyřízen.
Chcete-li se dotázat na záhlaví HTTP z webu, postupujte takto:
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
Nahrání souborů na FTP server
cURL lze také použít k nahrávání souborů na FTP server pomocí -T
možnost.
curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.server.com
V důsledku toho 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.server.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.server.com/mynewfile.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 mynewfile.txt
.
Můžete zadat jeden -T
pro každou adresu URL a dvojice určuje, co kam nahrát.
Stahování souborů z FTP serveru
cURL lze také použít ke stahování souborů z FTP serverů. Pokud je daná cesta FTP adresářem, ve výchozím nastavení zobrazí soubory v konkrétním adresáři.
curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/mysql.php
Výše uvedený příkaz stáhne mysql.php
soubor z ftp serveru a uložte 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.
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 http://ftp.us.debian.org/debian/pool/main/[a-z]/
Výše uvedený příkaz vypíše seznam všech balíků z a-z
rozsahy v terminálu.
Další informace pomocí možnosti Verbose a Trace
Pomocí -v
můžete zjistit, co se děje volba. Tato volba povolí podrobný režim a vytiskne podrobnosti.
curl -v https://www.gnu.org
Příkaz about vypíše následující:
* 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
<
...
Odesílat poštu 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 napište .
(tečka) jako poslední řádek, který e-mail okamžitě odešle.
Kontrola podpory HTTP/2
Pokud máte nejnovější verzi cURL, můžete použít --http2
možnost zkontrolovat, zda konkrétní URL podporuje nový protokol HTTP/2. Pokud tedy web podporuje HTTP/2, uvidíte HTTP/2.0 200
v záhlaví namísto HTTP/1.1 200
.
curl -I --http2 https://www.opensource.com
Simulace metod HTTP
GET
metoda se používá k načtení zdrojů z konkrétní adresy URL. Jednoduchý curl https://www.gnu.org/
příkaz použije GET
jako výchozí metodu HTTP, lze ji však zadat také pomocí --request GET
nebo -X GET
.
curl --request GET https://www.gnu.org
POST
metoda se používá k odesílání informací na webový server (např. komentář na fóru). To lze zadat pomocí --request POST
nebo -X POST
.
curl --request POST https://yourwebsite.com
Tlačítko DELETE
metoda odstraní zdroj z webového serveru přidruženého ke konkrétní adrese URL. To lze zadat pomocí --request DELETE
nebo -X DELETE
.
curl --request DELETE https://yourwebsite.com
PUT
metoda vytvoří nebo nahradí zdroj na základě dat, která klient odešle na webový server. (např. vytvoření nové webové stránky nebo aktualizace stávající). To lze zadat pomocí --request PUT
nebo -X PUT
.
curl --request PUT https://yourwebsite.com
Zadat požadavek POST s parametry
Následující příkaz odešle animal1
a animal2
parametry spolu s jejich odpovídajícími hodnotami na https://yourdomain.com/animals.php
curl --request POST --data "animal1=cat&animal2=dog" https://yourdomain.com/animals.php
Tento tip můžete použít k simulaci chování běžného formuláře HTML.
Závěr
V tomto příspěvku jsme vysvětlili co je cURL a co můžete dělat s některými základními příkazy. Chcete-li se o cURL dozvědět více, můžete navštívit webovou stránku projektu.