curl и командная строка: минимум

↑ 1.7 Инструменты исследования: DevTools, логи, трассировки · ← Предыдущая

Желательно~4 мин чтенияУровень: middle

Зачем это аналитику и PM

Команда в задаче повторяется без скрина и без учётной записи в чужом клиенте. Минимума флагов хватает, чтобы отправить JSON, увидеть код и не спрятать ошибку соединения.

План темы

  • базовые флаги
  • отправка JSON
  • вывод заголовков
  • когда удобнее Postman

Объяснение

curl ходит по HTTP из терминала. Для разбора одного вызова достаточно нескольких флагов. Остальной справочник не нужен, пока задача не про файлы и сессии.

Как открытка вместо толстого конверта. Адрес, короткое тело, пометка «что внутри». Получатель либо отвечает, либо открытка возвращается с ошибкой. Ошибку надо видеть, а не глотать.

-sS убирает полосу прогресса, но оставляет сообщение сбоя. Без второй буквы тихий режим прячет и обрыв сети. -X задаёт метод, когда это не обычное чтение. -H добавляет заголовок. -d передаёт тело. Для JSON заголовок типа ставят явно: сам факт тела не обязан выставить application/json.

Заголовки ответа показывает -i: они попадают в тот же вывод, что и тело. Так видно код и имя идентификатора. Тело при этом всё ещё на экране.

Postman удобнее, когда запросов много, нужны окружения, тесты и общая коллекция. curl удобнее, когда одну команду кладут в задачу, в переписку или в шаг проверки без окна. Коллекцию curl не заменяет.

Примеры

Чтение. Команды учебные, хосты публичные.

curl -sS "https://jsonplaceholder.typicode.com/todos/1"

Заголовки ответа вместе с телом:

curl -sS -i "https://jsonplaceholder.typicode.com/todos/1"

Отправка JSON:

curl -sS -X POST "https://httpbin.org/post" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"title":"example","done":false}'

Тело как данные, не как секрет. Кавычки вокруг JSON в команде одинарные, чтобы оболочка не съела внутренние.

{"title": "example", "done": false}

Нюансы и подводные камни

  • -s без -S молчит и при обрыве. В примерах для людей держите -sS.
  • Тело в двойных кавычках ломается о символы оболочки. Для JSON надёжнее одинарные.
  • -X GET вместе с -d выглядит странно и зависит от сервера. Для чтения тело не прикладывают.
  • Команда с заголовком допуска из браузера — это живая сессия. В задачу её не копируют.
  • httpbin и JSONPlaceholder не проверяют ваш контракт. Они только показывают, что команда синтаксически живая.

Практика

Соберите две команды: GET учебного адреса и POST с одним JSON-полем title. Проверьте, что оболочка принимает текст команды (bash -n или вставка в терминал без отправки, если так спокойнее).

Ожидаемый результат: у POST есть заголовок типа JSON и тело в одинарных кавычках. У GET нет тела. В обеих нет заголовка допуска. Ошибку сети флаги не прячут.

Вопросы с ответами

Связано с блоком Developer

Связанные темы