curl to scyzoryk do gadania z internetem z poziomu terminala. Wysyła i pobiera dane przez mnóstwo protokołów (HTTP, HTTPS, FTP, SFTP, SMTP i inne), a w codziennej pracy admina i juniora najczęściej służy do testowania endpointów API, sprawdzania nagłówków HTTP, pobierania plików i diagnozowania, dlaczego serwer odpowiada tak, a nie inaczej. Działa nieinteraktywnie, więc świetnie nadaje się do skryptów i healthchecków.
Składnia i najważniejsze opcje
Podstawowa forma: curl [opcje] URL. Domyślnie curl wypisuje treść odpowiedzi na standardowe wyjście (stdout) i nie podąża za przekierowaniami.
-I(albo--head) — pobiera tylko nagłówki odpowiedzi (żądanie HEAD), bez treści. Idealne do szybkiego sprawdzenia statusu.-v(--verbose) — tryb gadatliwy: pokazuje pełny dialog klient-serwer, w tym wysłane i odebrane nagłówki. Niezastąpione przy debugowaniu.-L(--location) — podąża za przekierowaniami 3xx. Bez tego dostaniesz gołą odpowiedź 301/302 zamiast docelowej strony.-o plik(--output) — zapisuje odpowiedź do wskazanego pliku zamiast na ekran. Wariant-Ozapisuje pod nazwą z URL-a.-X METODA(--request) — wymusza metodę HTTP, np.POST,PUT,DELETE.-H "Naglowek: wartosc"(--header) — dodaje własny nagłówek, np. token autoryzacji.-d "dane"(--data) — wysyła dane w ciele żądania; samo użycie-ddomyślnie zmienia metodę na POST.-s(--silent) — wycisza pasek postępu i komunikaty o błędach, przydatne w skryptach.
Przykłady użycia
curl -I https://learningzone.pl— sprawdza sam status i nagłówki strony, bez pobierania całego HTML-a.curl -L -o strona.html https://example.com— podąża za przekierowaniami i zapisuje finalną stronę do plikustrona.html.curl -X POST -H "Content-Type: application/json" -d '{"name":"Alek"}' https://api.example.com/users— wysyła zapytanie POST z ciałem w JSON do API.curl -H "Authorization: Bearer TOKEN" https://api.example.com/me— odpytuje endpoint chroniony tokenem.curl -v https://example.com 2>&1 | grep "^<"— w trybie verbose filtruje tylko nagłówki przychodzące od serwera.
Częste błędy i pułapki
Brak -L to klasyk: dostajesz status 301 i pustkę zamiast treści, bo curl domyślnie nie idzie za przekierowaniem. Druga pułapka: -o zapisuje wszystko, łącznie z komunikatem błędu serwera (np. stroną 404) — sam status sprawdzaj przez -I albo opcję -f (--fail), która zwraca błąd przy odpowiedziach 4xx/5xx zamiast zapisywać śmieci. Przy -d pamiętaj, że domyślnie koduje to jako application/x-www-form-urlencoded — dla JSON-a musisz ręcznie ustawić nagłówek Content-Type. Uważaj też na cudzysłowy: w bashu pojedyncze chronią $ i nawiasy klamrowe przed interpretacją powłoki. Wersje curl bywają stare na minimalnych obrazach Dockera, więc nie każda egzotyczna flaga zadziała wszędzie.
Powiązane komendy: wget (alternatywa do pobierania plików), http (HTTPie, przyjaźniejszy dla API), dig oraz nslookup (diagnostyka DNS), ping i traceroute (warstwa sieci poniżej HTTP).