シェルスクリプトでサイトのhttpステータスのみを取得する方法は?

シェルスクリプトでサイトのhttpステータスのみを取得する方法は?

カールがそのことができると思います。私はスクリプトに次のように書きました。

#!/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

ここでの問題は、私が何をしても、次のものを標準出力に印刷するのを止めることができないことです。

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

私はcronjobがこのスクリプトを実行したいと思います。これがこのようなメッセージを書くと、実行するたびにウェブサイトが大丈夫ですが、cronの標準出力に何かが印刷されたため、電子メールが届きます。

標準出力にゴミを入れずにどのようにステータスコードを取得できますか?このコードは、stdoutでの使用を妨げる追加のゴミを除いて動作します。

答え1

   -s/--silent
          Silent or quiet mode. Don't show progress meter 
          or error messages.  Makes Curl mute.

したがって、あなたのリソースは次のようになります

res=`curl -s -I $1 | grep HTTP/1.1 | awk {'print $2'}`

Error 301 on google.comたとえば、結果は次のようになります。

答え2

欲しい

...
res=$( curl -w %{http_code} -s --output /dev/null $1)
...

これにより、HTTP_STATUSコードが唯一の出力として提供されます。

答え3

エンドホストにリダイレクトされ、応答を受け取るには、次のようにします。

res=($(curl -sLI "${1}" | grep '^HTTP/1' | tail -1))
((res[1] == 200)) || echo ${res[2]}

答え4

上記のように、カールはデフォルトでhttpレスポンスを提供できます。

#!/bin/bash
#example1.sh
function test {
  RESPONSE=$(curl -so /dev/null -w "%{http_code}\n" ${1})
  if [[ $RESPONSE != 200 ]]; then
    echo "Error ${RESPONSE} on ${1}"
  fi
}    
test mysite.com
test google.com

例1、-s進捗状況を沈黙させ、-o /dev/null応答を削除します。しかし、-wここに同盟があります。

$ ./example1.sh 
Error 000 on mysite.com
Error 301 on google.com

url_effective と redirect_url を要求することで、カールでデフォルトでこれをさらに簡素化できます。

#!/bin/bash
#example2.sh
function test {
  curl -so /dev/null -w "%{http_code}\t%{url_effective}\t%{redirect_url}\n" ${1}
}  
test mysite.com
test google.com

例2最初のhttp応答、元の要求のドメイン、およびリダイレクトされたサーバーの応答を確認します。

$ ./example2.sh 
000 HTTP://mysite.com/  
301 HTTP://google.com/  http://www.google.com/

ただし、最終的に301または302リダイレクト後に200応答を作成したい場合は、前述の「redirect_url」を削除できます。

#!/bin/bash
#example3.sh
function test {
  curl -sLo /dev/null -w "%{http_code}\t%{url_effective}\n" ${1}
}  
test mysite.com
test google.com

-L例3リダイレクトを追跡するようにカールに指示するコマンドを追加しました。

$ ./example3.sh 
000 HTTP://mysite.com/
200 http://www.google.com/

関連情報