linux-labs

Вики / Сеть

curl (HTTP из консоли)

Запросы HTTP/HTTPS из CLI — отладка API и веб-сервисов, заголовки, методы.

curl шлёт HTTP(S)-запросы из командной строки — незаменим для отладки API, веб-серверов (nginx) и проверки доступности.

curl https://example.com          # GET, тело в stdout
curl -I https://example.com       # только заголовки ответа (HEAD)
curl -s https://example.com       # тихо (без прогресс-бара) — для скриптов
curl -L https://example.com       # идти по редиректам
# код ответа без тела (健康-чек)
curl -s -o /dev/null -w '%{http_code}\n' https://example.com

# методы и данные
curl -X POST -d 'a=1&b=2' https://api/x
curl -H 'Content-Type: application/json' -d '{"k":"v"}' https://api/x
curl -H 'Authorization: Bearer TOKEN' https://api/x

# заголовки запроса/подмена Host (полезно за прокси)
curl -H 'Host: site.local' http://127.0.0.1/
curl -v https://example.com       # весь обмен (запрос+ответ+TLS)

# файлы
curl -O https://site/file.tar.gz  # сохранить под тем же именем
curl -o out.bin https://site/x    # под своим именем
Флаг Смысл
-s без прогресс-бара (скрипты)
-S показывать ошибки даже при -s
-f падать с ошибкой на HTTP 4xx/5xx (для скриптов)
-L следовать редиректам
-I только заголовки (HEAD)
-w '%{http_code}' вывести метрику (код, время, размер)
-k не проверять TLS-сертификат (осторожно)
--resolve host:port:IP подменить DNS для запроса

502/504 за прокси

Апстрим недоступен/таймаут. Проверь сам апстрим: curl -v http://127.0.0.1:8000/. Частая причина 502 — прокси шлёт https на http-порт.

SSL certificate problem

Сертификат невалиден/самоподписан. Для отладки -k (но не в проде); правильно — починить цепочку/CA.

Could not resolve host

DNS (см. «DNS и разрешение имён»). Проверь getent hosts <имя>. Обойти: --resolve host:443:1.2.3.4.

Хочу понять, что именно шлётся

curl -v покажет строку запроса, заголовки и TLS-рукопожатие.

curl -s -o /dev/null -w '%{http_code}\n' URL   # health-check
curl -I URL                       # заголовки
curl -v URL                       # весь обмен
curl -H 'Host: x' http://127.0.0.1/   # подмена Host
curl -X POST -d 'a=1' URL ; -H 'Authorization: Bearer T'
curl --resolve host:443:IP URL    # обойти DNS

См. также