Código de estado de retorno y cuerpo en curl

Código de estado de retorno y cuerpo en curl

¿Es posible utilizar curl para llamar a un servicio REST (método POST) y obtener:

  • El código de estado HTTP.
  • El cuerpo de respuesta.

Otra información como encabezados, métodos, etc. no son relevantes para mi caso de uso y, de hecho, aumentan la confusión al realizar las pruebas.

Por ejemplo, estoy haciendo:

$ 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

Sé que el servicio está regresando 400y puedo verlo, y también el error de respuesta Invalid product: product does not existque también puedo ver, así que eso es bueno.

Sin embargo, ¿es posible deshacerse del resto de la pantalla?

Respuesta1

En lugar de -imostrar los encabezados de respuesta, puedes usar -w/ --write-outcon una cadena de formato que contenga la http_codevariable:

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

imprimiría el estado de la respuesta (y una nueva línea) después del cuerpo. Busque man curlotras variables que puedan resultarle útiles.

Respuesta2

Sobre la base de la solución de @DonHolgo, se puede agregar más información en el escrito 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"}'

El resultado en este caso se combina con la respuesta de POST:

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

Puede capturar eso en una variable y procesar 3 cosas: la respuesta POST (JSON), el código de respuesta HTTP y el código de salida del comando cURL.

información relacionada