2013-04-24 8 views
5

Я пытаюсь создать утилиту is-website-down с java, но у меня есть некоторые проблемы.Проверьте, существует ли сайт

Есть ли способ проверить, существует ли сайт? Я попробовал это, чтобы увидеть, если сайт вниз:

URL url = new URL("http://localhost"); 
HttpURLConnection httpConnection = (HttpURLConnection) (url.openConnection()); 
int code = httpConnection.getResponseCode(); 
System.out.println("code: " + code); 

Он проходит через IOException для Connection refused: connect когда то я пытаюсь подключиться к локальному, а не активный серверу HTTP прослушивания (сайт вниз).

Я думал, что это будет происходить то же самое с какой-либо сайт, который на самом деле не существует, т.е.

URL url = new URL("http://www.sdfasfjkhaslfjkhaslkdjfhasldkjf.it"); 

Но я получить код 200 HTTP Status, потому что мой провайдер автоматически перенаправляет меня на случайную страницу с объявлениями, если сайт, которого я ищу, не существует.

Итак, если сайт не работает, моя программа говорит «Ну, ваш сайт не работает», но если сайт не существует, моя программа говорит «О, ваш сайт работает!», И это не так. действительно хорошо.

Есть ли способ проверить, существует ли сайт?

+6

Ого, какой плохой провайдер. – eboix

+0

@eboix Да. К сожалению, я думаю, что каждый итальянский интернет-провайдер работает так – BackSlash

+0

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

ответ

1

Чтение ваших комментариев об отравлении DNS ISP. Ваш интернет-провайдер предоставляет/арендует вам DNS-сервер, на котором они находятся под контролем, который улавливает все ответы NXDOMAIN и возвращает отравленный результат на сервер, которым они управляют.

Я бы сделал проверку DNS для записи A с чем-то вроде Google Public DNS или каким-либо другим общеизвестным действительным DNS-сервером, прежде чем вы выполните проверку HTTP. Google Public DNS возвращает NXDOMAIN, когда домен недействителен. В Java вам может понадобиться использовать что-то вроде dnsjava, чтобы получить прямой доступ к нужной записи DNS.

В заключение сделайте две проверки: одну для действительной записи DNS с известным хорошим источником, затем другую, чтобы узнать, жив ли HTTP.

+1

Как я могу проверить DNS-серверы Google без их установки? Я не могу попросить пользователя приложения изменить его настройки DNS, есть ли способ «спросить» их, если веб-сайт разрешен без установки их в качестве DNS-адресов по умолчанию? – BackSlash

+0

Вы не измените DNS-серверы конечного пользователя. Вы должны настроить DNS-сервер в своем приложении для поиска. Если вы откроете командную строку/сеанс сеанса термина «nslookup kjfksadljfksl.com», введите «nslookup kjfksadljfksl.com 8.8.8.8». Вы предлагаете «nslookup» выполнять поиск по Google, а не против DNS-серверов вашего интернет-провайдера. Вы бы сделали аналогичную вещь в своем коде. –

+0

'nslookup kjfksadljfksl.com 8.8.8.8' означает, что мне нужно выполнять команды терминала из моего java-приложения, было бы лучше, если бы я не ... Я попробую dnsjava, возможно, он решает все мои проблемы! – BackSlash

1

Только что найденный Java - How to find the redirected url of a url?, который предлагает установку httpConnection.setFollowRedirects (false) - это может помочь, если они выполняют фактические переадресации. Если они не перенаправляются, а просто обслуживают собственный контент, не уверены, что многое предстоит сделать, кроме как определить, является ли контент тем, что вы ожидали, или рекламой.

0

Вы можете добавить:

HttpURLConnection.setFollowRedirects(false); 
// note : or 
//  httpConnection.setInstanceFollowRedirects(false); 

и контроль:

(httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) 
Смежные вопросы