我正在寻找一个简单的shell(+ curl)检查,如果URL存在(返回200),则检查结果为true或false。
Answers:
使用--fail
将使失败请求的退出状态不为零。使用--head
会避免下载文件内容,因为我们不需要此检查。使用--silent
将避免支票本身发出状态或错误。
if curl --output /dev/null --silent --head --fail "$url"; then
echo "URL exists: $url"
else
echo "URL does not exist: $url"
fi
如果您的服务器拒绝HEAD请求,则可以选择仅请求文件的第一个字节:
if curl --output /dev/null --silent --fail -r 0-0 "$url"; then
-r 0-0
仅请求文件的第一个字节。我已经适当修改了答案。
return 0
,并return 1
为感实性和falsiness,而不是使用标准输出返回true
,并false
作为字符串。这样,某人可以运行:if existURL "$url"
,而没有试图捕获其标准输出并对其进行解释的额外(低效)开销。
我发现wget是比CURL更好的工具。记住的选项较少,您实际上可以在bash中检查其真实值,以查看默认情况下它是否成功。
if wget --spider http://google.com 2>/dev/null; then
echo "File exists"
else
echo "File does not exist"
fi
该--spider
选项使wget仅检查文件而不是下载文件,并使2> /dev/null
wget的stderr输出静音。
--fail
,可以对curl进行相同操作。
wget google.com/asdf
和curl google.com/asdf
。 curl
遇到404错误时,默认情况下返回EXIT_SUCCESS,而wget
返回EXIT_FAILURE。
--spider
参数的目的:它wget
在检查文件的存在之后(而不是下载)来使返回。
-o /dev/null
禁止将标头打印到stdout