Код состояния возврата и тело в curl

Код состояния возврата и тело в curl

Можно ли использовать curl для вызова REST-сервиса (метод POST) и получить:

  • Код статуса HTTP.
  • Текст ответа.

Другая информация, такая как заголовки, методы и т. д., не имеет отношения к моему варианту использования и на самом деле добавляет путаницы при тестировании.

Например, я делаю:

$ curl -i -H 'Content-Type: application/json' -d @payload.json localhost:8080/apply
HTTP/1.1 100 

HTTP/1.1 400 
Content-Type: text/plain;charset=UTF-8
Content-Length: 42
Date: Fri, 22 Oct 2021 16:29:18 GMT
Connection: close

Invalid product: product does not exist

Я знаю, что служба возвращает 400данные, и Invalid product: product does not existя также вижу ошибку ответа, так что это хорошо.

Однако возможно ли избавиться от остальной части дисплея?

решение1

Вместо -iотображения заголовков ответа можно использовать -w/ --write-outсо строкой формата, содержащей http_codeпеременную:

curl --write-out '%{http_code}\n' ...

выведет статус ответа (и новую строку) после тела. Проверьте man curlдругие переменные, которые могут оказаться полезными.

решение2

Основываясь на решении @DonHolgo, можно добавить больше информации в запись следующим образом:

curl --location 'https://foo.acme.com' \
--request POST \
--write-out '\nhttp_code=%{http_code}\nexitcode=%{exitcode}\n' --silent --show-error \
--header 'Content-Type: application/json' \
--data '{"foo": "bar","baz":"bim"}'

В этом случае вывод объединяется с ответом POST:

{"requestId":"550aa1ff-0001-bf46-79ae-018cfe00dff7"}
http_code=202
exitcode=0

Вы можете зафиксировать это в одной переменной и обработать 3 вещи: ответ POST (JSON), код ответа HTTP и код выхода из команды cURL.

Связанный контент