Проверьте, переходит ли URL на страницу, содержащую текст «404» - PullRequest
3 голосов
/ 22 июня 2011

У меня есть сценарий 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 спискаurls? )

EDIT Кажется, что в скрипте есть ошибка: он возвращает "200", но если я wget -o log, тот же адрес, я получаю "404 не найден"

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

Для удовольствия - вот решение 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 голос
/ 22 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...