【发布时间】:2018-03-01 19:09:41
【问题描述】:
我已经使用curl -i http://website.com 很长时间了。很棒,它报告了响应头和信息。
我还使用了一个工具jq,它可以解析并漂亮地打印 JSON。我想做以下事情:
curl -i http://website.com | jq -r .
问题在于 HTTP 标头被转发到 jq。
有没有办法将-i 重定向到标准错误?
【问题讨论】:
标签: curl
我已经使用curl -i http://website.com 很长时间了。很棒,它报告了响应头和信息。
我还使用了一个工具jq,它可以解析并漂亮地打印 JSON。我想做以下事情:
curl -i http://website.com | jq -r .
问题在于 HTTP 标头被转发到 jq。
有没有办法将-i 重定向到标准错误?
【问题讨论】:
标签: curl
试试这个命令:
curl -s -D /dev/stderr http://www.website.com/... | jq
【讨论】:
-D /dev/stderr 将标头写入 stderr,-s 删除进度条。我经常添加-S,所以如果 curl 失败我仍然会收到错误(-s 否则会隐藏)。
curl -s -D CON http://www.website.com/... | jq . 适用于 Windows。 tyvm 提示正确方向。
由于我今天遇到了一些问题,所以我想出了:
curl -i http://some-server/get.json | awk '{ sub("\r$", ""); print }' | awk -v RS= 'NR==1{print > "/dev/stderr";next} 1' > /dev/stdout | jq .
很可能不是最好的解决方案,但它对我有用。
说明:第一个 awk 程序只会将 windows 新行转换为 unix 新行。
在第二个程序中,-v RS= 将指示 awk 使用一个或多个空行作为记录分隔符[1]。 NR==1{print > "/dev/stderr";next} 会将第一条记录 (NR==1) 打印到 stderr,下一条语句强制 awk 立即停止处理当前记录并继续处理下一条记录[2]。 1 只是 {print $0}[3] 的简写。
[1]https://stackoverflow.com/a/33297878
[2]https://www.gnu.org/software/gawk/manual/html_node/Next-Statement.html
[3]https://stackoverflow.com/a/20263611 p>
【讨论】: