用curl检查Web服务的Linux脚本已启动

时间:2012-10-05 14:00:21

标签: linux curl

我在http://localhost/test/testweb

提供了一个网络服务

我想编写一个脚本来检查webservice是否已启动curl

如果给出了curl参数,则返回200 OK ok true false以便我可以使用它是linux脚本中的if-else块

6 个答案:

答案 0 :(得分:59)

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

答案 1 :(得分:5)

我使用:

curl -f -s -I "http://example.com" &>/dev/null && echo OK || echo FAIL

-f --fail出现HTTP错误时静默失败(根本没有输出)
-s --silent静默模式
-I --head仅显示文档信息

注意:
根据需要,您还可以删除“ -I”,因为在某些情况下,您需要执行GET而不是HEAD

答案 2 :(得分:3)

与@ 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 :(得分:0)

这将通过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 :(得分:0)

我需要一个更好的答案,所以我写了下面的脚本。

fakePhrase用于检测ISP“搜索助手”广告软件HTTP resposnes。

#!/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 :(得分:0)

使用此:

curl -o $CURL_OUTPUT -s -w %{http_code}\\n%{time_total}\\n $URL > $TMP_FILE 2>&1
cat $TMP_FILE