curl

Przesyła dane przez wiele protokołów (HTTP, FTP) i diagnozuje połączenia oraz nagłówki.

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 -O zapisuje 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 -d domyś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 pliku strona.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).