Извините, изначально я пропустил предостережение "не предлагать завиток". Но вы все еще можете получить что-то из этого поста ...
Способ сделать это - использовать curl. Если вы получите ответ МЕТОД НЕ РАЗРЕШЕН, тот же самый ответ должен содержать список разрешенных методов. Вы могли бы, возможно, опубликовать это. Иногда метод GET запрещен, а метод HEAD разрешен; в других случаях это наоборот. Единственный способ узнать это проверить ответ. Я предполагаю , что вы попробовали метод GET и автоматически пришли к выводу, что метод HEAD (то есть загрузка только заголовков) одинаково запрещен. Это не обязательно так, иногда администраторы запрещают GET избегать перегрузки своих ограниченных ресурсов соединения, но они разрешают HEAD. Нет способа узнать априори.
Преимущества curl :
curl можно сказать загружать только заголовок, тем самым отбрасывая бесполезную (в данном случае) загрузку реальной страницы; просто попробуй:
curl -I http://www.debian.org
curl автоматически сохраняет соединение открытым в течение времени по умолчанию (я думаю, 900 секунд):
# curl -v http:://www.debian.org -I www.debian.org
......
* Connection #0 to host www.debian.org left intact
Это опция по умолчанию, но, чтобы ошибиться в безопасности, в Руководстве указано, что вы можете использовать, если хотите, опцию --keepalive .
Чтобы ускорить процесс, вы можете распараллелить curl:
URL_LIST=$(cat inputfile)
echo $URL_LIST | xargs -n 1 -P 8 -I{} bash -c 'curl -I {} 2>1 | grep 404 &>/dev/null ; [ $? ] && echo {}'
Это передает имена URL по одному (-n 1) до максимум 8 параллельно (-P 8) следующей команде, которая печатает имя URL тогда и только тогда, когда найден код 404. Опция -I {} сообщает xargs, где разместить выбранное имя URL. Весь вывод отбрасывается, потому что все, что нужно, это код завершения последней команды, grep.
В зависимости от ваших конкретных потребностей возможны и другие варианты адаптации: список вариантов скручивания огромен.