我在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输出中获得"仅#34; json响应?
我浏览了卷曲文档,但看不到任何东西/或者我可能错过了它
感谢任何帮助! THX
答案 0 :(得分:96)
您正在指定-i
选项:
-i , - include
(HTTP)在输出中包含HTTP标头。 HTTP标头包括服务器名称,文档日期,HTTP版本等等......
只需从命令行中删除该选项:
response=$(curl -sb -H "Accept: application/json" "http://host:8080/some/resource")
答案 1 :(得分:8)
我正在执行一个 get 请求,并且只想查看响应而不是其他任何东西,似乎使用 -silent,-s 选项完成了魔术。
来自 curl 手册页:
<块引用>-s, --silent 静音或安静模式。不要显示进度表或错误消息。使 Curl 静音。它仍然会输出您要求的数据,甚至可能输出到终端/标准输出,除非您重定向它。
在示例下方:
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"
答案 2 :(得分:-2)
#!/bin/bash
req=$(curl -s -X GET http://host:8080/some/resource -H "Accept: application/json") 2>&1
echo "${req}"