在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-outhttp_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 命令的退出代码。

相关内容