检查网站是否存在

时间:2013-04-24 20:31:56

标签: java web

我正在尝试使用java创建一个is-website-down实用程序,但我遇到了一些问题。

有没有办法检查网站是否存在?我试过看看网站是否关闭了:

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

当{I}尝试连接到localhost而没有活动的http服务器监听(网站已关闭)时,IOException通过Connection refused: connect

我认为某些网站实际上不存在会发生同样的事情,即

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

但我收到HTTP状态代码200,因为如果我正在搜索的网站不存在,我的ISP会自动将我重定向到随机广告页面。

所以,如果网站出现故障,我的程序会说“嗯,你的网站已关闭”,但如果该网站不存在,我的程序会说“哦,你的网站正常运行!”,这不是真的好。

有没有办法检查网站是否存在?

3 个答案:

答案 0 :(得分:1)

阅读有关ISP DNS中毒的评论。您的ISP正在向您提供/租赁他们可以控制的DNS服务器,该服务器捕获所有NXDOMAIN个响应,并将中毒的结果返回给他们控制的服务器。

在进行HTTP检查之前,我会使用Google Public DNS或其他一些公知的有效DNS服务器对A记录进行DNS检查。当域无效时,Google Public DNS确实会返回NXDOMAIN。在Java中,您可能需要使用dnsjava之类的东西来直接访问所需的DNS记录。

最后,进行两次检查,一次是针对已知良好来源的有效DNS记录,另一次是查看HTTP是否还活着。

答案 1 :(得分:1)

刚刚发现Java - How to find the redirected url of a url?建议设置httpConnection.setFollowRedirects(false) - 如果他们正在进行实际的重定向,这可能会有所帮助。如果他们没有重定向,但只是提供他们自己的内容,不确定除了检测内容是否符合预期或广告时,还有很多工作要做。

答案 2 :(得分:0)

您可能想要添加:

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

和控制:

(httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK)