1

安全な Web サイトの証明書が 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 をスローし、同じメッセージ「信頼できるサーバー証明書がありません」をスローすることがわかりました。

証明書が有効かどうかに関係なく、サーバーがオンラインかどうかを知る方法はありますか?

ありがとう!

4

3 に答える 3

2

「https://flimflam.asdfasdfasdfg.com」などの偽のURLでテストし、ケースで何が起こるかを確認します。

メソッドIOExceptionに基づいて接続が確立されなかった場合は、起動する必要があります。openConnectionほとんどの場合、これはタイムアウトのようなものであり、タイムアウト期間を待つことに時間を費やします。

于 2012-06-21T17:15:11.163 に答える
1

con.getResponseCode();beforeを使用しcon.disconnect();て、必要な例外を取得してみてください。

于 2012-06-21T17:21:58.783 に答える
0

解決策を見つけました。この関数を呼び出す前に、URL がオンラインかどうかを確認する必要があります。CA 署名チェックなしで httpsclient を使用して応答を取得できます。次に、このメソッドを呼び出します。

于 2012-06-21T20:49:32.160 に答える