我有一个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”
答案 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的,那么有人就不能正常工作。