A curl egy eszköz adatátvitelre szerverek között, számos protokollt támogat:
HTTP, HTTPS, FTP, IMAP, LDAP, POP3, SCP, SFTP, SMB, SMTP, stb...
Forrás: GitHub | Hivatalos oldal
Hasznos opciók a curl parancshoz:
-o <file> # --output: fájlba írás
-u user:pass # --user: autentikáció
-v # --verbose: részletes futás
-vv # még részletesebb
-s # --silent: nincs progress/error
-S # --show-error: hibák megjelenítése silent módban
-i # --include: HTTP fejlécek is
-I # --head: csak fejlécek
HTTP kérések beállítása:
-X POST # --request: POST kérés
-L # követi a redirecteket
-F # --form: multipart/form-data
Adatok küldése POST vagy GET módszerrel:
-d 'data' # --data: POST adat
-d @file # fájlból adatküldés
-G # -d adat GET módszerrel
HTTP fejlécek beállítása:
-A <str> # --user-agent
-b name=val # --cookie érték
-b FILE # --cookie fájlból
-H "X-Foo: y" # --header
--compressed # gzip/deflate használata
SSL/TLS kapcsolatok beállítása:
--cacert <file> # CA tanúsítvány
--capath <dir> # CA könyvtár
-E, --cert <cert> # kliens cert fájl
--cert-type # der/pem/eng
-k, --insecure # self-signed engedélyezése
HTTP GET és HEAD kérések példái:
curl -I https://quickref.me # HEAD request
curl -v -I https://quickref.me # részletes HEAD request
curl -X GET https://quickref.me # explicit GET
curl --noproxy 127.0.0.1 http://stackoverflow.com # proxy nélkül
curl --connect-timeout 10 -I -k https://quickref.me # timeout beállítás
curl --verbose --header "Host: www.mytest.com:8182" quickref.me # extra header
curl -k -v https://www.google.com # válasz fejlécekkel
Több fájl feltöltése form-data használatával:
curl -v --include \
--form key1=value1 \
--form upload=@localfilename URL
JSON válasz szépen formázva Python eszközzel:
curl -XGET http://${elasticsearch_ip}:9200/_cluster/nodes | python -m json.tool
Adatok küldése POST módszerrel:
curl -d "name=username&password=123456" <URL>
curl <URL> -H "content-type: application/json" -d "{ \"woof\": \"bark\"}"
RVM telepítése scriptből:
curl -sSL https://get.rvm.io | bash
Haladó példák:
curl -L -s http://ipecho.net/plain
curl -u $username:$password http://repo.dennyzhang.com/README.txt
curl -v -F key1=value1 -F upload=@localfilename <URL>
curl -k -v --http2 https://www.google.com/
curl -T cryptopp552.zip -u test:test ftp://10.32.99.187/
curl -u test:test ftp://10.32.99.187/cryptopp552.zip -o cryptopp552.zip
curl -v -u admin:admin123 --upload-file package1.zip http://myserver:8081/dir/package1.zip
Weboldal válaszidő mérése:
curl -s -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nAppCon time:\t%{time_appconnect}\nRedirect time:\t%{time_redirect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' \
-o /dev/null https://www.google.com
Ellenőrzi, hogy egy távoli erőforrás elérhető-e:
curl -o /dev/null --silent -Iw "%{http_code}" https://example.com/my.remote.tarball.gz
PNG fájlok letöltése weboldalról:
curl https://example.com | \
grep --only-matching 'src="[^"]*.[png]"' | \
cut -d \" -f2 | \
while read i; do curl https://example.com/"${i}" -o "${i##*/}"; done
Fájlok letöltése és mentése:
curl --remote-name "https://example.com/linux-distro.iso"
curl --remote-name "http://example.com/index.html" --output foo.html
curl --remote-name --continue-at -"https://example.com/linux-distro.iso"
curl "https://www.{example,w3,iana}.org/index.html" --output "file_#1.html"
curl "https://{foo,bar}.com/file_[1-4].webp" --output "#1_#2.webp"
Felhasználónév/jelszó alapú autentikáció:
curl --user username:password http://example.com/
curl -u username:password http://example.com/
Kimenet fájlba írása stdout helyett:
curl -o file http://url/file
curl --output file http://url/file
Csak a HTTP fejlécek megjelenítése:
curl -I url
Távoli script letöltése és futtatása:
curl -s http://url/myscript.sh