java - 检查网站是否存在

标签 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);

它通过 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/

相关文章:

java//解压报错:MALFORMED

c++ - cgicc - cgi.getElements(),哪个方法?得到或邮寄?

html - 为什么这个 CSS 会被播放?

c# - 无法从 "method group"转换为 "string"

java - 如何访问 zip 文件中的 SQLite 数据库 - android

java - 如何捕获 TransientPropertyValueException

javascript - 图形分辨率会使网页变慢吗?

jQuery在点击时改变div的大小

java - 包含文件和 JSON 对象的多部分请求

java - 如何检测哪个组合框状态发生了变化?