【问题标题】:Report HTTP Response Headers to stderr?向标准错误报告 HTTP 响应标头?
【发布时间】:2018-03-01 19:09:41
【问题描述】:

我已经使用curl -i http://website.com 很长时间了。很棒,它报告了响应头和信息。

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

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

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

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

【问题讨论】:

    标签: curl


    【解决方案1】:

    试试这个命令:

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

    【讨论】:

    • 这正是 OP 想要的。 -D /dev/stderr 将标头写入 stderr,-s 删除进度条。我经常添加-S,所以如果 curl 失败我仍然会收到错误(-s 否则会隐藏)。
    • curl -s -D CON http://www.website.com/... | jq . 适用于 Windows。 tyvm 提示正确方向。
    【解决方案2】:

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

    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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 2017-11-11
      相关资源
      最近更新 更多