Java 检查网站是否存在

Java 检查网站是否存在,java,web,Java,Web,我正在尝试用java制作一个is网站关闭实用程序,但我有一些问题 有没有办法检查网站是否存在?我尝试了以下方法以查看网站是否已关闭: URL url = new URL("http://localhost"); HttpURLConnection httpConnection = (HttpURLConnection) (url.openConnection()); int code = httpConnection.getResponseCode(); System.out.println("

我正在尝试用java制作一个is网站关闭实用程序,但我有一些问题

有没有办法检查网站是否存在?我尝试了以下方法以查看网站是否已关闭:

URL url = new URL("http://localhost");
HttpURLConnection httpConnection = (HttpURLConnection) (url.openConnection());
int code = httpConnection.getResponseCode();
System.out.println("code: " + code);
当我尝试连接到本地主机,但没有活动http服务器侦听时(站点关闭),它会通过
IOException
进行
连接拒绝:connect

我想在一些实际上不存在的网站上也会发生同样的事情,例如

URL url = new URL("http://www.sdfasfjkhaslfjkhaslkdjfhasldkjf.it");
但是我收到一个HTTP状态码200,因为如果我搜索的网站不存在,我的ISP会自动将我重定向到一个随机广告页面

所以,如果一个网站关闭了,我的程序会说“好吧,你的网站关闭了”,但是如果这个网站不存在,我的程序会说“哦,你的网站启动并运行了!”,这不是很好


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

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

在您执行HTTP检查之前,我会使用类似或其他公开已知的有效DNS服务器对a记录进行DNS检查。当域无效时,Google公共DNS会返回
NXDOMAIN
。在Java中,您可能需要使用类似的方法来直接访问所需的DNS记录

最后,进行两次检查,一次检查已知良好源的有效DNS记录,然后另一次检查HTTP是否处于活动状态。

刚刚找到建议设置httpConnection.setFollowRedirects(false)-如果他们正在进行实际重定向,这可能会有所帮助。如果他们没有重定向,只是提供自己的内容,除了检测内容是否符合您的预期或是否是广告之外,不确定还有多少工作要做。

您可能需要添加:

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

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

哇,多糟糕的ISP。@eboix是的。不幸的是,我认为每个意大利ISP都是这样工作的。如果你的ISP像这样重定向你,你也可以认为它不可用。@PeterLawrey是的。事实上,每个不同的ISP都以不同的方式处理这种情况,因此我需要一个能与每个ISP一起工作的通用ISP。我猜这是因为您可能没有本地主机中的端口号,例如,我如何在不设置它们的情况下检查google DNSE?我不能要求应用程序用户更改其DNS设置,是否有一种方法可以“询问”他们是否在不将网站设置为默认DNS的情况下解析了网站?您不会更改最终用户的DNS服务器。您需要在应用程序中设置DNS服务器来执行查找。如果打开命令提示符/终端会话类型
nslookup kjfksadljfksl.com
,则键入
nslookup kjfksadljfksl.com 8.8.8
。您告诉
nslookup
针对谷歌进行查找,而不是针对您的ISP的DNS服务器。您可以在代码中执行类似的操作。
nslookup kjfksadljfksl.com 8.8.8
意味着我必须从java应用程序执行终端命令,如果我不。。。我试试dnsjava,也许它能解决我所有的问题!