了解HTTPS网址是否在线

时间:2012-06-21 17:03:03

标签: java android ssl

如果安全网站的证书由CA签名,我需要一个返回true的函数。在Android中,如果您尝试连接到自签名证书,它会抛出SSLException,在这种情况下,我只是捕获它并返回false。您可以查看代码:

public static boolean isValidCertificate(URL url) throws IOException {
    HttpsURLConnection con;
    try {
        con = (HttpsURLConnection) url.openConnection();
        con.connect();
        con.disconnect();
        return true;
    } catch (SSLException e) {
        return false;
    } 
}

我的问题是,如果网站不可用,我希望该函数抛出异常。但我发现在这种情况下Android会抛出相同的SSLException,并使用相同的消息:“没有可信任的服务器证书”。

有没有办法知道服务器是否在线,无论证书是否有效?

谢谢!

3 个答案:

答案 0 :(得分:2)

使用虚假网址(例如“https://flimflam.asdfasdfasdfg.com”)对其进行测试,看看您的情况会发生什么。

如果基于IOException方法未建立连接,则应触发openConnection。很可能这更像是超时,你会花时间等待超时时间。

答案 1 :(得分:1)

尝试在con.getResponseCode();之前使用con.disconnect();来获取您想要的异常。

答案 2 :(得分:0)

我找到了解决方案。我只需要在调用此函数之前检查URL是否在线。我可以使用没有CA签名检查的httpsclient并获得响应,然后,我称之为此方法。