调查 000 从 bash 脚本中的 cURL 返回错误代码的原因 [重复]

Posted

技术标签:

【中文标题】调查 000 从 bash 脚本中的 cURL 返回错误代码的原因 [重复]【英文标题】:Investigating cause of 000 returned error code from cURL in bash script [duplicate] 【发布时间】: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。 【参考方案1】:

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

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

【讨论】:

(1) 考虑引用"$link"; (2) 考虑将 exit-status 集合与设置它的命令放在同一行,以便日志记录或其他代码更改不太可能在收集之前无意中修改状态。

以上是关于调查 000 从 bash 脚本中的 cURL 返回错误代码的原因 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在bash脚本中执行存储在heredoc中的curl命令?

git-bash 中的 curl 命令

sh bash脚本运行循环以从文件中读取随机URL和用户代理,并使用cURL运行请求。这可以从任何系统运行

如何将curl的输出捕获到bash中的变量[重复]

bash 脚本中带有 PKCS#12 证书的 cURL

循环 bash 脚本,直到 cURL 响应不等于字符串