如何让curl只输出http响应体(json)而没有其他标题等

Ris*_*shi 63 bash json curl

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

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

服务响应是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
Run Code Online (Sandbox Code Playgroud)

这打破了我的响应解析逻辑.
我间歇地看到这种情况很奇怪.

有没有办法从卷曲输出中获得"仅" json响应?
我浏览了curl文档,但看不到任何东西/或者我可能错过了它.
感谢任何帮助!谢谢

Rem*_*eau 109

您正在指定-i选项:

-i, - 包括

(HTTP)在输出中包含HTTP标头.HTTP标头包括服务器名称,文档日期,HTTP版本等等...

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

response=$(curl -sb -H "Accept: application/json" "http://host:8080/some/resource")
Run Code Online (Sandbox Code Playgroud)

  • 从echo $ response更改了echo“响应为$ response”,现在我可以看到正确的响应。邓诺为什么会这样。谢谢! (2认同)

Enr*_*cio 13

我正在执行一个 get 请求,也只想看到响应而不是其他任何东西,似乎魔术是用-silent,-s选项完成的。

从 curl 手册页:

-s, --silent 静默或安静模式。不要显示进度表或错误消息。使 Curl 静音。它仍然会输出您要求的数据,甚至可能输出到终端/标准输出,除非您重定向它。

下面的例子:

curl -s "http://host:8080/some/resource"
curl -silent "http://host:8080/some/resource"
Run Code Online (Sandbox Code Playgroud)

使用自定义标题

curl -s -H "Accept: application/json" "http://host:8080/some/resource")
Run Code Online (Sandbox Code Playgroud)

使用带有标题的 POST 方法

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

您还可以使用-w自定义特定值的输出,在我用来获取 curl 响应代码的选项下方:

curl -s -o /dev/null -w "%{http_code}" "http://host:8080/some/resource"
Run Code Online (Sandbox Code Playgroud)