Базовые формы
bash
curl https://example.com # GET, тело в stdout
curl -s https://api.example/users # -s: silent (без progress bar)
curl -o out.html https://example.com # сохранить в файл
curl -O https://example.com/file.tar.gz # сохранить с original-именем
curl -X POST -d 'name=alice' https://... # POST с form-данными
curl -X POST -H "Content-Type: application/json" -d '{"x":1}' https://...curl -X DELETE https://api.example/u/123
Заголовки и аутентификация
bash
curl -H "Authorization: Bearer $TOKEN" https://api.example
curl -u user:pass https://api.example # basic auth
curl --cookie "session=abc" https://...
curl -A "Mozilla/5.0" https://... # User-Agent
Дебаг-флаги
bash
curl -v https://example.com # verbose: видим request + response headers
curl -I https://example.com # ТОЛЬКО headers (HEAD-запрос; быстрая проверка)
curl --trace-ascii - https://example.com # дамп всех байт обмена
curl -w "@curl-format.txt" -o /dev/null -s https://example.com # тайминги
Формат для -w:
time_namelookup: %{time_namelookup}stime_connect: %{time_connect}stime_appconnect: %{time_appconnect}s # TLS-handshaketime_starttransfer: %{time_starttransfer}s # TTFBtime_total: %{time_total}sВидно где именно тормозит: dns-resolution / TCP / tls-handshake / сервер.
TLS
bash
curl -k https://self-signed # пропустить проверку сертификата (НЕ для прода!)
curl --cacert ca.pem https://... # доверять конкретному CA
curl --cert client.pem --key client.key # mTLS
curl --resolve example.com:443:1.2.3.4 https://example.com # подмена DNS
--resolve - золото для тестов: ходит к указанному IP, но шлёт корректный
SNI/Host. Без правки /etc/hosts.
Повторы и таймауты
bash
curl --max-time 10 https://... # общий timeout 10с
curl --connect-timeout 5 https://... # только TCP-connect
curl --retry 3 --retry-delay 2 https://... # auto-retry на сетевых ошибках
Pipe в jq
bash
curl -s https://api.github.com/repos/torvalds/linux | jq '.stargazers_count'
Стандартная связка для REST-дебага.