【问题标题】:Investigating cause of 000 returned error code from cURL in bash script [duplicate]调查 000 从 bash 脚本中的 cURL 返回错误代码的原因 [重复]
【发布时间】:2019-04-19 15:48:12
【问题描述】:

我正在使用 cURL 在 bash 脚本中检查链接的正常运行时间,如下所示:

curl -Lo /dev/null --silent --head --write-out '%{http_code}' $link

link="http://deadlink/" 为例。

它返回 000 因为它是一个死链接,这很好,但是每当我从 cURL 收到 000 响应时(因为可能有很多原因),我想应用一些逻辑来找出那里发生了什么。例如,是因为连接被拒绝、超时、ssl 失败等原因吗?

我认为最好的方法是直接从 cURL 中隔离错误代码并使用 IF 语句对其进行测试。这很好,所以我最接近从 cURL 本身提取错误代码是这样的:

failState=$(curl -Ss $link; echo "error code is $?" )
echo $failState

很好的回报:

curl: (6) Could not resolve host: brokenlink
error code is 6

如何将“6”放入变量中?

【问题讨论】:

  • 顺便说一句,这在BashFAQ #2 中进行了讨论。
  • 顺便说一句,如果你只想要一个的输出并且不需要区分特定的不成功的HTTP状态值,考虑使用--fail这样curl会如果 HTTP 状态为 400 或更高,请将 $? 设置为 22。

标签: bash curl error-handling


【解决方案1】:

您可以在将 curl 的输出分配给 failState 之后立即将 $? 分配给另一个变量。

failState=$(curl -Ss "$link") exitCode=$?

【讨论】:

  • (1) 考虑引用"$link"; (2) 考虑将 exit-status 集合与设置它的命令放在同一行,以便日志记录或其他代码更改不太可能在收集之前无意中修改状态。
猜你喜欢
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 2013-01-24
  • 1970-01-01
相关资源
最近更新 更多