curl и командная строка: минимум
↑ 1.7 Инструменты исследования: DevTools, логи, трассировки · ← Предыдущая
Зачем это аналитику и 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 нет тела. В обеих нет заголовка допуска. Ошибку сети флаги не прячут.
Вопросы с ответами
Зачем -sS, если можно без флагов?
Без
-scurl рисует прогресс, его неудобно класть в задачу. Один-sпрячет и сбой. Пара-sSоставляет текст ошибки.
Как отправить JSON?
-Hс типомapplication/jsonи-dс телом. Метод POST указывают через-X, если не полагаются на то, что тело само поменяет метод.
Как увидеть заголовки ответа?
Флаг
-iпечатает их перед телом. Там ищут код и идентификатор корреляции, если сервис его отдал.
Когда оставить Postman?
Когда нужна папка запросов, окружение стенда и повтор всей пачки. Одну команду для тикета кладут текстом, без сборки мышью. Для этого достаточно curl.