如何在 shell 脚本中(仅)获取站点的 http 状态?

14 cron curl output

我认为 curl 可以完成这项工作。我在脚本中写道:

#!/bin/sh

function test {
    res=`curl -I $1 | grep HTTP/1.1 | awk {'print $2'}`
    if [ $res -ne 200 ]
    then
        echo "Error $res on $1"
    fi
}  

test mysite.com
test google.com
Run Code Online (Sandbox Code Playgroud)

这里的问题是无论我做什么我都无法停止将以下内容打印到标准输出:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Run Code Online (Sandbox Code Playgroud)

我想要一个 cronjob 来运行这个脚本,如果它写了这样的消息,那么每次我运行它我都会收到一封电子邮件,因为有些东西已经被打印到了 cron 的标准输出中,即使网站可能很好。

如何在不让垃圾进入标准输出的情况下获取状态代码?除了标准输出的奖励垃圾阻止我使用它之外,此代码有效。

ДМИ*_*КОВ 13

   -s/--silent
          Silent or quiet mode. Don't show progress meter 
          or error messages.  Makes Curl mute.
Run Code Online (Sandbox Code Playgroud)

所以你的资源应该看起来像

res=`curl -s -I $1 | grep HTTP/1.1 | awk {'print $2'}`
Run Code Online (Sandbox Code Playgroud)

结果是Error 301 on google.com,例如。


Tim*_*edy 11

你要

...
res=$( curl -w %{http_code} -s --output /dev/null $1)
...
Run Code Online (Sandbox Code Playgroud)

这将为您提供 HTTP_STATUS 代码作为唯一的输出。