Эффективно обнаруживать неработающие URL в Java - PullRequest
1 голос
/ 26 января 2011

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

Ответы [ 3 ]

2 голосов
/ 26 января 2011

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

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

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

1 голос
/ 26 января 2011

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

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

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

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

0 голосов
/ 26 января 2011

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

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

...