我curl
用来下载一个 zip 文件。curl
从bash
脚本调用:
curl --user joedoe http://1.2.3.4/files/joedoe.zip -o /tmp/downloaded.zip
我想检测目标 zip 文件何时不存在。
我试过了
if ! [[ $? == 0 ]] ; then
echo "ERROR: problem with Curl."
exit 1
fi ;
但似乎$?
返回的curl
是 is 0
,所以我无法检测到 zip 文件何时不存在。
怎么做到呢?
如果 HTTP 状态代码不是 200 ,这几乎是Can I make cURL fail with an exitCode不同于 0 的重复?最赞成的答案(即当我写这篇文章时最赞成的答案)建议
-f
。此解决方案将捕获4xx
或5xx
HTML 错误代码,但不会捕获301 Moved Permanently
. 在您的情况下,HTML 错误代码可能是也可能不是301
.如果我是你,我会捕获并分析这段代码。幸运的是,您
curl
使用-o
并写入常规文件,而不是标准输出;所以我们可以使用标准输出来完成我们的额外任务。-w
是你需要的:现在你有
$exit_status
和$http_code
分析。决定是否需要-f
并相应地构建脚本的逻辑。基本上你想$http_code
成为200
. 即使是200
,也要检查是否$exit_status
是0
。想象一下链接很好,但您无法写入/tmp/downloaded.zip
(也许有人在其中放置了一个恶意文件,希望您会使用它)。这是一个示例情况,当您可以200
从服务器获取但仍然是错误(非零$exit_status
)来自curl
.即使
$exit_status
is0
和$http_code
is200
,您可能仍想检查是否/tmp/downloaded.zip
是有效的 zip 文件。一个基本的测试可能是退出状态:(如果您
file
支持这些选项)。“完整”测试是通过检查以下各项的退出状态: