向stderr报告HTTP响应标头?

时间:2018-03-01 19:09:42

标签: curl

我一直在使用curl -i http://website.com很长一段时间。它很棒,它会报告响应标头和信息。

我还使用了一个工具jq来解析和漂亮地打印JSON。我想做以下事情:

curl -i http://website.com | jq -r .

问题在于HTTP标头被转发到jq

有没有办法将-i重定向到标准错误?

2 个答案:

答案 0 :(得分:1)

由于我今天遇到了一些问题,所以我使用了:

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

答案 1 :(得分:0)

尝试以下命令:

curl -s -D /dev/stderr http://www.website.com/... | jq