Retornar código de status e corpo em curl

Retornar código de status e corpo em curl

É possível usar curl para chamar um serviço REST (método POST) e obter:

  • O código de status HTTP.
  • O corpo da resposta.

Outras informações, como cabeçalhos, métodos, etc., não são relevantes para o meu caso de uso e, na verdade, aumentam a confusão durante o teste.

Por exemplo, estou fazendo:

$ 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

Eu sei que o serviço está retornando, 400pelo que posso ver, e também o erro de resposta Invalid product: product does not existque também posso ver, então isso é bom.

Porém, é possível se livrar do resto da tela?

Responder1

Em vez de -iexibir os cabeçalhos de resposta, você poderia usar -w/ --write-outcom uma string de formato contendo a http_codevariável:

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

imprimiria o status da resposta (e uma nova linha) após o corpo. Verifique man curloutras variáveis ​​que você pode achar úteis.

Responder2

Com base na solução @DonHolgo, pode-se adicionar mais informações no texto como este:

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"}'

A saída neste caso é combinada com a resposta do POST:

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

Você pode capturar isso em uma variável e processar três coisas: a resposta POST (JSON), o código de resposta HTTP e o código de saída do comando cURL.

informação relacionada