Эффективно обнаруживать неработающие URL в Java

Какой самый эффективный способ обнаружить неработающий URL (HTTP 404) в Java? Я хотел бы сделать это в цикле и занять как можно меньше времени.

3 ответа

Вы можете обнаружить 404 только после того, как запросите URL: вы получите заголовок с кодом (200, или 301 для перенаправления, или 404 для отсутствующего файла), и вы можете проверить это.

Так что вам придется выполнить запрос и ждать возможных 404.

Ниже приведен довольно хороший комментарий, который не следует пропускать, поэтому я повторяю его здесь:Возможная оптимизация (в случае существующих URL): используйте запрос HEAD вместо GET.

Есть много разных способов, которыми URL может быть взломан:

  • Синтаксически неверный
  • Содержит несуществующий домен
  • Сервер недоступен
  • Сервер не принимает соединения
  • Сервер отвечает с ошибкой

За исключением первого, все это может занять относительно длительное время (возможно, в среднем более секунды), и ускорить его невозможно, так как вы общаетесь с другим компьютером.

Единственное, что вы можете сделать - это параллельно проверять множество URL-адресов с помощью пула потоков.

Я написал действие Github, которое может помочь в непрерывной интеграции, проверяя все ссылки перед любым слиянием или обновлением. Это действие gitHub считывает все сценарии с учетом ввода определенных расширений, извлекает все ссылки и тестирует их одну за другой. Действие также доступно на торговой площадке GitHub для использования в проектах, размещенных на GitHub:

https://github.com/marketplace/actions/urls-checker

Скрипты написаны на Python, поэтому вы можете с небольшими изменениями использовать их локально: https://github.com/SuperKogito/URLs-checker

Не стесняйтесь форкнуть и пометить репозиторий, если вы сочтете это полезным;)

Вы можете установить URL-соединение, чтобы проверить, что URL-адрес поврежден, перехватывая исключение и проверяя код состояния HTTP. Если исключение не выдается, а статус HTTP равен 200, URL-адрес в порядке.

Но будь осторожен! Иногда URL не работает, но приложение возвращает читаемую человеком страницу ошибки со статусом 200. Например, сайт www.somecompany.com существует, но страница www.somecompany.com/foo.html больше не существует. Когда вы пытаетесь попасть туда, вы получаете сообщение "страница не существует", но HTTP-статус равен 200. Это можно решить (иногда), анализируя только содержимое страницы.

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