使用curl发送POST请求后,如何抑制冗长输出仅显示目标内容?
解决curl只输出响应体(JSON内容)的方法
嘿,这个问题其实很容易解决,我来给你几个实用的方案:
方案一:直接调整curl参数(最简单)
你原来的命令里加了-i参数——这个参数就是curl用来强制输出HTTP响应头的“元凶”!只要去掉它,再加上-s参数隐藏curl自身的进度条、连接状态等冗余信息,就能直接得到你想要的JSON响应体了。
修改后的完整命令:
curl -s -X POST -H 'Content-type:application/json' some_url -d '{ "some":"json"}'
参数说明:
-s:静默模式,会屏蔽curl的进度提示、连接日志等无关输出,只保留服务器返回的响应内容- 移除
-i:这个参数原本用于显示HTTP响应头,去掉后curl默认只返回响应体(也就是你的目标JSON数据)
方案二:过滤已有输出(适合无法修改原命令的场景)
如果因为某些原因你必须保留-i参数,或者已经拿到了包含响应头的输出,也可以用管道结合文本处理工具过滤掉响应头,只保留JSON部分:
用sed过滤
curl -i -X POST -H 'Content-type:application/json' some_url -d '{ "some":"json"}' | sed -n '/^\{/,$p'
这个命令会从第一个以{(JSON的起始符号)开头的行开始,输出到内容末尾,完美跳过前面的HTTP响应头。
用awk过滤
curl -i -X POST -H 'Content-type:application/json' some_url -d '{ "some":"json"}' | awk 'BEGIN{flag=0} /^\{/{flag=1} flag==1{print}'
原理和sed类似:先设置一个标记位,当检测到以{开头的行时开启标记,之后只输出标记开启后的内容。
内容的提问来源于stack exchange,提问作者Shailesh Sutar
相关产品推荐
相关产品推荐

