如何让 cURL 只输出 HTTP 响应主体(JSON)而不输出其他报头等

我在 bash 脚本中使用 curl 来获取服务的响应,如下所示,

response=$(curl -isb -H "Accept: application/json" "http://host:8080/some/resource")

服务响应是 json 类型的,在浏览器上我可以很好地响应。
然而 curl 响应还有其他不需要的东西(比如本例中的 set-cookie、内容长度标头) ,有时候实际的响应会被消耗掉。

这是 echo $response > 的输出

 Set-Cookie: rack.session=BAh7CEkiD3Nlc3Npb25faWQGOgZFVEkiRWJlY2JiOTE2M2Q1ZWI4NThjMDdi%0AYjRiOWRjMGMxMGEwYTBkMjE3NmJhZDVjYzY4YjY4ZTlmMTE2ZGVkYWE3MTMG%0AOwBGS
SIJY3NyZgY7AEZJIiVhZmQ2MmUyZGMxMzFmOGEwMjg3NDlhNWM3YmVm%0AN2FjNwY7AEZJIg10cmFja2luZwY7AEZ7B0kiFEhUVFBfVVNFUl9BR0VOVAY7%0AAFRJIi00MTc0OGM2MWNkMzljZTYxNzY3ZjU0
Y2I5OTdiYWRkN2MyNTBkYmU4%0ABjsARkkiGUhUVFBfQUNDRVBUX0xBTkdVQUdFBjsAVEkiLWRhMzlhM2VlNWU2%0AYjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDkGOwBG%0A--ee97a62095e7d42129
tontent-Length: 354c8; path=/; HttpOnly

这破坏了我的响应解析逻辑。
我见过这种情况间歇发生,这很奇怪。

有没有从 cURL 输出获得 “只有” json 响应的方法?
我浏览了 curl 文档,但是没有看到任何东西/或者我可能错过了它。

359302 次浏览

您正在指定 -i选项:

包括

(HTTP) 在输出中包含 HTTP 头。 HTTP 头包括服务器名称、文档日期、 HTTP 版本等内容。

只需从命令行中删除该选项:

response=$(curl -sb -H "Accept: application/json" "http://host:8080/some/resource")
#!/bin/bash


req=$(curl -s -X GET http://host:8080/some/resource -H "Accept: application/json") 2>&1
echo "${req}"

我正在执行一个获取请求,也想看到只有响应,没有其他,似乎魔术是用 - 安静-S选项完成。

来自 curl 手册页:

- S-安静 静音或静音模式。不要显示进度表或错误消息。让 Curl 哑口无言。它仍然会输出您请求的数据,甚至可能输出到终端/stdout,除非您重定向它。

下面的例子:

curl -s "http://host:8080/some/resource"
curl --silent "http://host:8080/some/resource"

使用自定义标头

curl -s -H "Accept: application/json" "http://host:8080/some/resource")

使用带头的 POST 方法

curl -s -X POST -H "Content-Type: application/json" "http://host:8080/some/resource") -d '{ "myBean": {"property": "value"}}'

您还可以使用 - 什么为特定值自定义输出,下面是我用来获得 curl 的响应代码的选项:

curl -s -o /dev/null -w "%{http_code}" "http://host:8080/some/resource"