我正在尝试使用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会自动将我重定向到随机广告页面。
所以,如果网站出现故障,我的程序会说“嗯,你的网站已关闭”,但如果该网站不存在,我的程序会说“哦,你的网站正常运行!”,这不是真的好。
有没有办法检查网站是否存在?
答案 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)