如何获取curl以仅输出http响应正文(json)而不输出其他标头等


76

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

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

服务响应是json类型,在浏览器上我可以完美地响应。
但是curl响应还有其他不需要的东西(在这种情况下,例如set-cookie,content-length标头),有时实际的响应被吃光了。

这是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文档,但看不到任何东西,或者我可能错过了。
感谢任何帮助!谢谢

Answers:


125

您正在指定-i选项:

-i,--include

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

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

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

真正。但这很奇怪;它直接从命令行工作。但是从bash脚本来看,它的行为有所不同,除了字母“ t”,我无法在回声响应中看到任何东西
Rishi14,2014年

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

一种学习是在命令内部使用时总是“引用”一个echo变量。.responsenew = $(echo“ $ response” | grep“ abc”)
Rishi 2014年

Rishi,$ response周围的报价避免破坏新行和空格的内容
Pablo Adames

-4
#!/bin/bash

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

18
请避免代码转储,即使它是一个简单的代码块,也请始终尝试解释代码的作用或提供注释。
arco444 '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.