java urlencodedformentity Apache http客戶端或URLConnection




jsp httpurlconnection (3)

我需要在Android應用程序上下載一個網頁,我很難決定是否使用android apache http客戶端或java的URLConnection。

有什麼想法嗎?


自Gingerbread以來,Google一直默默地棄用Apache HTTP客戶端: android-developers.blogspot.com/2011/09/…android-developers.blogspot.com/2011/09/… 。 雖然他們沒有使用已棄用的註釋來標記它,但他們建議您將HttpURLConnection用於新應用程序: it is where we [Google] will be spending our energy going forward

我個人不喜歡這個決定,寧可堅持使用HttpClient 4.1+,因為它更快,錯誤更少,並且會定期更新。 雖然您無法將系統庫升級到4.1版,但您可以將HttpClient jar包含到您的Android項目中(因為這將使您不依賴於Google錯誤修復和供應商更新的額外好處)。 然而,有一個缺陷:為了防止與內置庫發生可能的衝突,您應該使用JarJar工具重命名httpclient包。 原來有人已經這樣做了(重新打包的jar和Android庫項目可供下載):

http://code.google.com/p/httpclientandroidlib/

這是針對Android的HttpClient 4.1的重新打包。 Android SDK中的HttpClient版本為4.0beta2。 自從4.0beta以來,已經對HttpClient和一些急需的錯誤修正(如auth緩存)進行了一些更新。

由於Google已棄用HttpClient而支持Java標準HttpURLConnection,因此我創建了一個腳本,將Apache的HttpClient的股票版本轉換為Android庫。

庫存HttpClient的變化

  • 將所有包org.apache.http重命名為ch.boye.httpclientandroidlib
  • 刪除了依賴於org.ietf的所有類。*(SPNEGO身份驗證)
  • 用android.util.Base64替換了org.apache.commons.codec.binary.Base64
  • 創建了一個新類HttpClientAndroidLog來替換org.apache.commons.logging


對於大多數事情,我會說HttpClient是要走的路。 然而,在某些情況和邊緣情況下,我會回到URLConnection 。 邊緣情況的例子herehere

編輯
之前已經提出過類似的問題: httpclient vs httpurlconnection我認為HttpUrlConnection有點快,因為HttpClient構建在標準Java庫之上。 但是我會發現HttpClient代碼更快更容易編寫和維護。 根據下面的評論, HttpClient的核心元素已經過性能優化。

如果性能是一個主要問題,最好的辦法是編寫兩個客戶端,一個使用每種方法,然後對它們進行基準測試。 如果您這樣做,請告訴我們結果。







apache-commons-httpclient