Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JSoup中轻松使用HTTPS(自签名证书)?_Java_Android_Https_Jsoup - Fatal编程技术网

Java 如何在JSoup中轻松使用HTTPS(自签名证书)?

Java 如何在JSoup中轻松使用HTTPS(自签名证书)?,java,android,https,jsoup,Java,Android,Https,Jsoup,在大学里,我们必须开发一个android应用程序,它可以从网站上获得我们的分数 我们使用JSoup框架获取和解析HTML页面。现在的问题是,我们的大学使用自签名证书进行HTTPS连接,而大型可信CA不信任该证书 我已经看到了一些常见问题的通用解决方案,但它们使用了扩展的DefaultHttpClient和自己的SSLSocketFactory。这些解决方案看起来不是很好,使用JSoup框架是否有一个简单漂亮的解决方案 private LoginState connect(String usern

在大学里,我们必须开发一个android应用程序,它可以从网站上获得我们的分数

我们使用JSoup框架获取和解析HTML页面。现在的问题是,我们的大学使用自签名证书进行HTTPS连接,而大型可信CA不信任该证书

我已经看到了一些常见问题的通用解决方案,但它们使用了扩展的DefaultHttpClient和自己的SSLSocketFactory。这些解决方案看起来不是很好,使用JSoup框架是否有一个简单漂亮的解决方案

private LoginState connect(String username, String password) {
        try {
            if (isOnline()) {
                Log.i(TAG, "Sending POST.");

                Connection connection = Jsoup.connect(LOGIN_URL)
                        .data(USER_FIELD, username).data(PASS_FIELD, password)
                        .data(LOGIN_BUTTON, "Anmelden")
                        .data(LOGIN_TYPE, "login").data(PID, "2")
                        .timeout(DEFAULT_TIMEOUT);

                mDocument = connection.post();

                mCookies.putAll(connection.response().cookies());

                if (isConnected()) {
                    Log.i(TAG, "Login successful.");
                    setState(LoginState.LOGIN_SUCCESSFUL);
                } else {
                    Log.i(TAG, "Login failed.");
                    setState(LoginState.LOGIN_FAILED);
                }
            } else {
                Log.i(TAG, "No Internet Connection.");
                setState(LoginState.BAD_CONNECTION);
            }
        } catch (IOException ex) {
            Log.e(TAG, ex.getStackTrace().toString());
            setState(LoginState.BAD_CONNECTION);
        }

        return getState();
    }

除非JSoup公开了一些API,允许您通过自己的信任存储,否则不会。如果您有根设备,您可以使用将大学证书安装到信任存储。如果您有Android 4.0(ICS)设备,则有一个用于安装可信CA证书的UI。另一个想法是:使用HttpClient获取数据,然后仅使用JSoup进行解析(这应该是可能的)

除非JSoup公开一些API,允许您通过自己的信任存储,否则不会。如果您有根设备,您可以使用将大学证书安装到信任存储。如果您有Android 4.0(ICS)设备,则有一个用于安装可信CA证书的UI。另一个想法是:使用HttpClient获取数据,然后仅使用JSoup进行解析(这应该是可能的)

相关/可能重复:谢谢@Craigy,但我如何解决以下异常[dhbw loerrach.de()网站的“javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:Trust anchor for certification path not found.”?我已经按照说明编写了测试一个小型java应用程序的代码,但在android上它不会运行,并以上述异常结束。文件类型或在android 2.3下的使用中是否存在错误?@Pyth0n您可能应该问一个关于特定问题的新问题相关/可能的重复:谢谢@Craigy,但是如何解决站点[dhbw loerrach.de()的以下异常“javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:Trust anchor for certification path not found.”?我已经按照说明编写了测试一个小型java应用程序的代码,但在android上它不会运行,并以上述异常结束。文件类型或在android 2.3下的使用中是否存在错误?@Pyth0n您可能应该问一个关于该特定问题的新问题