
¿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 400
y puedo verlo, y también el error de respuesta Invalid product: product does not exist
que también puedo ver, así que eso es bueno.
Sin embargo, ¿es posible deshacerse del resto de la pantalla?
Respuesta1
En lugar de -i
mostrar los encabezados de respuesta, puedes usar -w
/ --write-out
con una cadena de formato que contenga la http_code
variable:
curl --write-out '%{http_code}\n' ...
imprimiría el estado de la respuesta (y una nueva línea) después del cuerpo. Busque man curl
otras 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.