Linux script с завитком для проверки webservice
У меня есть веб-сервис, предоставляемый при http://localhost/test/testweb
Я хочу написать script, чтобы проверить, работает ли webservice с curl
Если имеется параметр curl, возвращает 200 OK
ok true false, поэтому я могу использовать его if-else block в linux script
Ответы
Ответ 1
curl -sL -w "%{http_code}\\n" "http://www.google.com/" -o /dev/null
-
-s
= Выход без звука cURL
-
-L
= следовать переадресации
-
-w
= Пользовательский формат вывода
-
-o
= перенаправляет вывод HTML на /dev/null
Пример:
[~]$ curl -sL -w "%{http_code}\\n" "http://www.google.com/" -o /dev/null
200
Я бы, вероятно, удалил \\n
, если бы я должен был захватить вывод.
Ответ 2
То же, что и @burhan-khalid добавил:
--connect-timeout 3
--max-time 5
test_command='curl -sL \
-w "%{http_code}\\n" \
"http://www.google.com:8080/" \
-o /dev/null \
--connect-timeout 3 \
--max-time 5'
if [ $(test_command) == "200" ] ;
then
echo "OK" ;
else
echo "KO" ;
fi
Ответ 3
Это будет проверять заголовки через wget 2>&1
, а stderr - на stdout
Фильтры grep
-O /dev/null
просто проливает содержимое страницы
if [ "\`wget http://example.org/ -O /dev/null -S --quiet 2>&1 | grep '200 OK'\`" != "" ];
then
echo Hello;
fi;
Я знаю, что не завитка, но все же решение
Ответ 4
Мне нужен был лучший ответ на этот вопрос, поэтому я написал script ниже.
FakePhrase используется для обнаружения рекламных HTTP-запросов рекламного ПО "Search Assist".
#!/bin/bash
fakePhrase="verizon"
siteList=(
'http://google.com'
'https://google.com'
'http://wikipedia.org'
'https://wikipedia.org'
'http://cantgettherefromhere'
'http://searchassist.verizon.com'
)
exitStatus=0
function isUp {
http=`curl -sL -w "%{http_code}" "$1" -o temp_isUp`
fakeResponse=`cat temp_isUp | grep $fakePhrase`
if [ -n "$fakeResponse" ]; then
http=$fakePhrase
fi
case $http in
[2]*)
;;
[3]*)
echo 'Redirect'
;;
[4]*)
exitStatus=4
echo "$1 is DENIED with ${http}"
;;
[5]*)
exitStatus=5
echo "$1 is ERROR with ${http}"
;;
*)
exitStatus=6
echo "$1 is NO RESPONSE with ${http}"
;;
esac
}
for var in "${siteList[@]}"
do
isUp $var
done
if [ "$exitStatus" -eq "0" ]; then
echo 'All up'
fi
rm temp_isUp
exit $exitStatus
Ответ 5
Используйте это:
curl -o $CURL_OUTPUT -s -w %{http_code}\\n%{time_total}\\n $URL > $TMP_FILE 2>&1
cat $TMP_FILE