2011-12-08 72 views
1

在大學我們必須開發一個android應用程序,它從網站上抓取我們的標記。如何使用JSoup輕鬆使用HTTPS(自簽名證書)?

我們使用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(); 
    } 
+0

相關/可能的重複:http://stackoverflow.com/a/7745706 – BalusC

+0

謝謝@Craigy,但我如何解決以下異常「javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:Trust找不到證書路徑的錨點。「爲該網站[dhbw-loerrach.de(https://www.dhbw-loerrach.de/)?我按照說明寫了測試一個小的Java應用程序,但在Android上它不會運行,並以上述異常結束。在Android 2.3下,文件類型或使用它有錯誤嗎? – Pyth0n

+0

@ Pyth0n你應該問一個關於那個特定問題的新問題 – Craigy

回答

1

除非JSoup暴露了一些可以讓您傳遞自己的信任存儲的API,如果您擁有根深蒂固的設備,則可以使用this將大學的證書安裝到信任商店。如果您有Android 4.0(ICS)設備,則有用於安裝可信CA證書的UI。另一個想法:使用HttpClient獲取數據,然後使用JSoup進行解析(這應該是可能的)。