Проверьте, переходит ли 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, кто-то не справится со своей работой правильно.

Другие вопросы по тегам