让 curl 将非 2xx 输出到 stderr,但将 2xxs 输出到文件

让 curl 将非 2xx 输出到 stderr,但将 2xxs 输出到文件

我想要一些 curl 命令,可能还需要一些 bash hackery,这样:

  1. 将任何 2xx 响应输出到文件
  2. 将任何非 2xx 响应输出至 stderr
  3. 当发生非 2xx 响应时,以非零状态代码退出

我知道-f标志会让我获得 3,而-o管道重定向会让我获得 1。但我不知道如何获得 2。

答案1

您能否将 curl 的输出回显到临时文件中(将 PID 作为名称的一部分)。在后台设置一个长时间的计时器(5 分钟以上删除文件)。然后对文件运行 sed 命令 #1,然后对文件运行 sed 命令 #2,然后对 STDerror 运行 sed 命令。第二个命令可以使用 q 命令返回非零答案。查看此处了解 sed 中 q 命令的用法。 https://stackoverflow.com/questions/15965073/return-code-of-sed-for-no-match

答案2

这就是我最终做的事情:

HTTP_CODE=`curl http://example.com/ \
      --verbose \
      --write-out "%{http_code}" \
      --output my-output-file`

if [ "$HTTP_CODE" != "200" ]; then
    cat my-output-file
    rm my-output-file
fi

相关内容