쉘 스크립트에서 사이트의 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_효과적인 및 리디렉션_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/

관련 정보