检查URL是否转到包含文本“404”的页面

时间:2011-06-22 12:40:58

标签: bash http-status-code-404

我有一个bash脚本来检查网址列表的HTTP状态代码,但我意识到有些,虽然看起来是“200”,但实际上显示的是一个包含“错误404”的页面。我怎么能检查呢?

这是我目前的剧本:

#!/bin/bash
while read LINE; do
  curl -o /dev/null --silent --head --write-out '%{http_code}\n' "$LINE"
done < url-list.txt

(我从先前的问题中得到了它:script to get the HTTP status code of a list of urls ?

编辑脚本中似乎有一个错误:它返回“200”,但如果我wget -o log同一个地址我得到“404 not found”

2 个答案:

答案 0 :(得分:3)

为了好玩 - 这是一个BASH解决方案:

dosomething() {
        code="$1"; url="$2"
        case "$code" in
                200) echo "OK for $url";;
                302) echo "redir for $url";;
                404) echo "notfound for $url";;
                *) echo "other $code for $url";;
        esac
}

#MAIN program
while read url
do
        uri=($(echo "$url" | sed 's~http://\([^/][^/]*\)\(.*\)~\1 \2~'))
        HOST=${uri[0]:=localhost}
        FILE=${uri[1]:=/}
        exec {SOCKET}<>/dev/tcp/$HOST/80
        echo -ne "GET $FILE HTTP/1.1\nHost: $HOST\n\n" >&${SOCKET}
        res=($(<&${SOCKET} sed '/^.$/,$d' | grep '^HTTP'))
        dosomething ${res[1]} "$url"
done << EOF
http://stackoverflow.com
http://stackoverflow.com/some/bad/url
EOF

答案 1 :(得分:1)

好吧,你可以查看响应正文并查找以明文打印的“404”,“错误404”,“未找到”,“未找到404”等,但这可能会产生假阴性和误报。虽然如果服务器发送200应该是404的,那么有人就不能正常工作。