Палец вверх 3
Перевод
Перевод

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

bash http-status-code-404
задан Manu 22 июн. 2011 г., 16:40:58
источник

2 ответа

Решение 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
ответ дан jm666 23 июн. 2011 г., 0:11:49
источник
Палец вверх 1
Перевод
Перевод

Ну, вы могли бы получить тело ответа и посмотреть «404», «Ошибка 404», «Не найдено», «404 Не найдено» и т. Д., Напечатанные в виде открытого текста, но это может дать как ложные, так и ложные срабатывания. Хотя, если сервер отправит 200 за то, что должно быть 404, кто-то не справится со своей работой правильно.

ответ дан sapht 22 июн. 2011 г., 17:11:10
источник