컬이 그 일을 할 수 있다고 생각합니다. 나는 스크립트에 다음과 같이 썼습니다.
#!/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/