Проверьте, переходит ли URL на страницу, содержащую текст "404"
У меня есть сценарий bash для проверки кода состояния HTTP в списке URL-адресов, но я понимаю, что некоторые из них, кажущиеся "200", отображают фактически страницу, содержащую "ошибку 404". Как я могу проверить это?
Вот мой текущий сценарий:
#!/bin/bash
while read LINE; do
curl -o /dev/null --silent --head --write-out '%{http_code}\n' "$LINE"
done < url-list.txt
(Я получил это из предыдущего вопроса: скрипт для получения HTTP-кода состояния списка URL-адресов?)
РЕДАКТИРОВАТЬ Кажется, есть ошибка в сценарии: он возвращает "200", но если я wget -o log
тот же адрес я получаю "404 не найден"
2 ответа
Для удовольствия - вот решение 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://stackru.com
http://stackru.com/some/bad/url
EOF
Ну, вы могли бы получить тело ответа и посмотреть "404", "Ошибка 404", "Не найдено", "404 Не найдено" и т. Д., Напечатанные в виде открытого текста, но это может дать как ложные, так и ложные срабатывания. Хотя, если сервер отправит 200 за то, что должно быть 404, кто-то не справится со своей работой правильно.