我有一个在http://localhost/test/testweb
提供的web服务
我想写一个脚本来检查web服务是否curl
如果有一个给定的curl参数,则返回200 OK
OK true false以便我可以使用它是if-else块在Linux脚本中
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
。
这将通过wget 2>&1
管道检查标题stderr到stdout grep
filters -O /dev/null
只是抛出页面的内容
if [ "\`wget http://example.org/ -O /dev/null -S --quiet 2>&1 | grep '200 OK'\`" != "" ]; then echo Hello; fi;
我知道不卷曲,但仍然是一个解决方案
我需要更好的答案,所以我写了下面的脚本。
伪造的短语用于检测ISP“搜索协助”广告软件的HTTP请求。
#!/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
用这个:
curl -o $CURL_OUTPUT -s -w %{http_code}\\n%{time_total}\\n $URL > $TMP_FILE 2>&1 cat $TMP_FILE
同@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