我正在尝试使用 java 制作一个 is-website-down 实用程序,但我遇到了一些问题。
有没有办法检查网站是否存在?我试过这个来查看网站是否已关闭:
URL url = new URL("http://localhost");
HttpURLConnection httpConnection = (HttpURLConnection) (url.openConnection());
int code = httpConnection.getResponseCode();
System.out.println("code: " + code);
它通过 IOException
for Connection refused: connect
当我尝试连接到本地主机时没有 Activity 的 http 服务器监听(站点已关闭)。
我认为对于一些实际上不存在的网站也会发生同样的事情,即
URL url = new URL("http://www.sdfasfjkhaslfjkhaslkdjfhasldkjf.it");
但我收到 HTTP 状态代码 200,因为如果我要搜索的站点不存在,我的 ISP 会自动将我重定向到随机广告页面。
所以,如果一个网站挂了,我的程序会说“好吧,你的网站挂了”,但如果该网站不存在,我的程序会说“哦,你的网站正在运行!”,但事实并非如此好。
有没有办法检查网站是否存在?
最佳答案
阅读您对 ISP DNS 中毒的评论。您的 ISP 正在向您提供/租用他们控制的 DNS 服务器,该服务器捕获所有 NXDOMAIN
响应并将中毒结果返回到他们控制的服务器。
我会使用 Google Public DNS 之类的内容对 A 记录进行 DNS 检查或其他一些公开的有效 DNS 服务器,然后再进行 HTTP 检查。当域无效时,Google 公共(public) DNS 会返回 NXDOMAIN
。在 Java 中,您可能需要使用类似 dnsjava 的东西直接访问您需要的 DNS 记录。
最后,进行两项检查,一项检查针对已知良好来源的有效 DNS 记录,另一项检查 HTTP 是否有效。
关于java - 检查网站是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16201602/