Wstęp
curl (Client for URLs") - jest to program uruchamiany w wierszu poleceń (Windows Git Bash lub Unix/Linux) służący do interakcji z serwerami w celu pobrania lub wysłania danych.
Wspiera takie protokoły jak: HTTP, HTTPS, FTP, FTPS, SCP, SFTP, SMB, LDAP, TFTP, RTMP, MQTT, IMAP, POP3, GOPHER, DICT, FILE, LDAP, LDAPS, RTSP, Telnet.
Przykłady
Przykłady możesz przetestować korzystając z dowolnego, ogólnodostępnego API. W internecie znajdziesz wiele serwisów takich jak serwis udostępniający informacje o krajach.
GET
Domyślną wartością podczas wywołania curl jest wywołanie HTTP GET (operacja odczytu danych), więc opcjonalnym, równoważnym parametrem jest "-X GET":
curl -X GET https://restcountries.com/v3.1/capital/tallinn
Serwis powyżej zwraca informacje na podstawie stolicy danego kraju. Jeśli informacje zwrócone przez serwer są w formacie JSON można je dodatkowo sformatować dla poprawy czytelności za pomocą polecenia jq (o ile jest dostępne).
POST
Aby wysłać dane na serwer w celu utworzenia nowego wpisu można wykonać polecenie POST:
curl -X POST -d "param1=value1¶m2=value2" http://example.com/resource
Jeśli dane są w postaci JSON warto pamiętać o dodaniu nagłówka HTTP Content-Type za pomocą flagi -H:
curl -X POST -H "Content-Type: application/json" -d '{"key1":"value1","key2":"value2"}' http://example.com/resource
Jeśli dane znajdują się w pliku data.json można je dołączyć następująco:
curl -X POST -H "Content-Type: application/json" -d @data.json http://example.com/resource
Plik data.json powinien wyglądać analogiczne do poniższego:
{
"key1": "value1",
"key2": "value2"
}
DELETE
W celu usunięcia danych należy wykonać operację DELETE:
curl -X DELETE http://example.com/resource/123
PUT
W celu aktualizacji istniejących danych należy wykonać operację PUT:
curl -X PUT -d "param1=newValue1¶m2=newValue2" http://example.com/resource/123
Jeśli dane do zaktualizowania znajdują się w zewnętrznym pliku należy postępować analogiczne jak w poleceniu POST.
CERTYFIKAT
Jeśli podczas próby nawiązania połączenia z serwerem otrzymujesz błędy weryfikacji certyfikatu serwerowego możesz zignorować je za pomocą flagi -k (zobacz "pozostałe flagi") lub dodać własny magazyn certyfikatów CA (truststore) aby klient (czyli program curl) mógł zweryfikować certyfikat serwerowy. Analogicznie możemy dodać certyfikat kliencki, jeśli serwer wymaga, aby podczas połączenia klient uwierzytelniał się certyfikatem:
curl --cert-type P12 --cert client.pfx:password --cacert /path/to/truststore.pem https://example.com/resource
W powyższym przykładzie zastosowano certyfikat kliencki w standardzie PKCS#12, jednak polecenie "curl" wspiera również inne.
FTP
W celu wysłania pliku localfile.txt na serwer FTP należy wykonać polecenie:
curl -T localfile.txt ftp://ftp.example.com/upload/
POZOSTAŁE FLAGI
Zapis wyniku żądania do pliku:
curl -o output.txt http://example.com/file.txt
Autoryzacja HTTP z użyciem loginu i hasła:
curl -u username:password http://example.com/resource
Dodanie pliku cookies.txt do żądania HTTP:
curl -b cookies.txt http://example.com
Ignorowanie błędów certyfikatów SSL/TLS (nie zalecane w środowisku produkcyjnym):
curl -k https://example.com
Wysyłanie pliku na serwer w ramach żądania PUT:
curl --upload-file localfile.txt http://example.com/upload
Podsumowanie
Polecenie "curl" jest powszechnie stosowane ze względu na prostotę. Umożliwia automatyzację powtarzalnych czynności poprzez zastosowanie w skryptach. W celu uzyskania wszystkich dostępnych opcji można wykonać polecenie:
curl -h
Bardziej szczegółową listę można uzyskać wykonując:
curl --help all
Warto pamiętać, że w starszych wersjach programu "curl" niektóre z opcji nie będą dostępne. W takim przypadku warto sprawdzić aktualnie dostępną wersję:
curl --version
i porównać do informacji zawartych na stronie: https://curl.se/docs/releases.html
Powodzenia!