如何让cURL只输出HTTP响应正文(JSON)而不输出其他标头等

bweufnob  于 2022-11-13  发布在  其他
关注(0)|答案(3)|浏览(558)

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

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

服务响应是json类型的,在浏览器上我可以很好地响应。
然而curl响应有其他不需要的东西(例如set-cookie,在本例中是content-length header),有时实际的响应会被吃掉。
下面是echo $response〉的输出

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

这会破坏我的响应解析逻辑。
我看到这种情况时断时续地发生,这很奇怪。
有没有办法从cURL输出中获得**“only”**json响应?
我浏览了curl文档,但没有看到任何内容/或者我可能错过了它。

h7wcgrx3

h7wcgrx31#

您指定的是-i选项:

-i,--包含

(HTTP)在输出中包含HTTP标头。HTTP标头包含服务器名称、文档日期、HTTP版本等内容...
只需从命令行中删除该选项:

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

8wtpewkr2#

我在执行get请求时,也希望只看到响应,而不看到其他任何内容,看起来像是使用**-silent,-s**选项实现的。
来自curl手册页:
-s,--silent静默或安静模式。不显示进度表或错误消息。使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"}}'

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

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

drkbr07n3#

#!/bin/bash

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

相关问题