Что такое curl и для чего он используется?
Что проверяют
Умеете ли вы проверять API без интерфейса и без Postman: воспроизвести баг одной командой, приложить её к задаче, обратиться к эндпоинту с сервера, где нет графической оболочки. Следом просят написать POST с JSON и токеном или спрашивают, как увидеть заголовки ответа.
Как отвечать
curl это консольная утилита и библиотека libcurl для передачи данных по URL. Поддерживает HTTP и HTTPS, FTP, SFTP и десятки других протоколов, есть в macOS, Linux и Windows 10 и новее. Для QA главное это HTTP:
- метод и тело:
-Xзадаёт метод,-dотправляет данные и сам переключает запрос на POST,--json '{"a":1}'(с версии 7.82) заодно ставитContent-TypeиAcceptвapplication/json,-Fотправляет файл какmultipart/form-data; - заголовки и авторизация:
-H "Authorization: Bearer ...",-u user:passдля Basic,-bи-cдля чтения и сохранения cookies; - ответ:
-iвыводит заголовки вместе с телом,-Iотправляет HEAD,-vпоказывает весь обмен, включая TLS,-Lидёт по редиректам; - для скриптов:
-sбез прогресса,-w '%{http_code}'печатает код ответа,--failдаёт ненулевой код выхода на статус 400 и выше,--max-timeограничивает ожидание.
На практике в DevTools есть Copy as cURL, и баг из браузера за секунду превращается в воспроизводимую команду, а Postman умеет импортировать такую команду. curl помогает проверить, что сервер валидирует данные сам, а не полагается на форму, и годится для смоук-проверок после деплоя в CI.
Где спотыкаются
Считают, что curl завершится ошибкой на ошибке сервера. Без --fail ответ 404 или 500 даёт код выхода 0, и проверка в пайплайне остаётся зелёной.
Путают -i и -I. Второй отправляет HEAD, а часть серверов отвечает на него иначе, чем на GET, и баг не воспроизводится.
Вставляют в баг-репорт команду из Copy as cURL целиком, с живым Authorization и cookies сессии. Токен из тикета видят все, у кого есть доступ к трекеру, поэтому такие заголовки вырезают.