在大学里,我们必须开发一个Android应用程序,它从网站上抓取我们的标记。
我们使用JSoup Framework来抓取和解析HTML页面。现在的问题是我们的大学使用自签名证书进行HTTPS连接,而不受更大的可信CA的信任。
我已经看到了这些经常出现的问题,一些通用的解决方案,但他们使用扩展的DefaultHttpClient和自己的SSLSocketFactory。这些解决方案看起来不太好,使用JSoup Framework有一个简单漂亮的解决方案吗?
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();
}
答案 0 :(得分:1)
除非JSoup公开了一些让你通过自己的信任商店的API,否则没有。如果您有root设备,则可以使用this将大学的证书安装到信任存储区。如果您有Android 4.0(ICS)设备,则可以使用UI来安装可信CA证书。另一个想法:使用HttpClient获取数据,然后仅使用JSoup进行解析(这应该是可能的)。