1. 程式人生 > >HttpClient和HttpURLConnection的使用和區別

HttpClient和HttpURLConnection的使用和區別

https://www.cnblogs.com/liushuibufu/p/4140913.html

 

  • 功能用法對比

    • 從功能上對比,HttpURLConnection比HttpClient庫要豐富很多,提供了很多工具,封裝了http的請求頭,引數,內容體,響應,還有一些高階功能,代理、COOKIE、鑑權、壓縮、連線池的處理。

    • HttpClient高階功能程式碼寫起來比較複雜,對開發人員的要求會高一些,而HttpURLConnection對大部分工作進行了包裝,遮蔽了不需要的細節,適合開發人員直接呼叫。

    • 另外,HttpURLConnection在2.3版本增加了一些HTTPS方面的改進,4.0版本增加一些響應的快取。

  • 效能對比

    • HttpUrlConnection直接支援GZIP壓縮;HttpClient也支援,但要自己寫程式碼處理。

    • HttpUrlConnection直接支援系統級連線池,即開啟的連線不會直接關閉,在一段時間內所有程式可共用;HttpClient當然也能做到,但畢竟不如官方直接系統底層支援好。

    • HttpUrlConnection直接在系統層面做了快取策略處理(4.0版本以上),加快了重複請求的速度。

    • 這篇文章對兩者的速度做了一個對比,做法是兩個類都使用預設的方法去請求百度的網頁內容,測試結果是使用httpurlconnection耗時47ms,使用httpclient耗時641ms。httpURLConnection在速度有比較明顯的優勢,當然這跟壓縮內容和快取都有直接關係。

  • 未來發展

    • HttpClient 適用於 web browsers, 他們是可擴充套件的,並且擁有大量的穩定APIs。但是,在不破壞其相容性的前提下很難對如此多的APIs做修改。因此,Android 團隊對修改優化Apache HTTP Client表現的並不積極。

    • HttpURLConnect 是一個通用的、適合大多數應用的輕量級元件。這個類起步比較晚,很容易在主要API上做穩步的改善。但是HttpURLConnection在在Android 2.2及以下版本上存在一些令人厭煩的bug,尤其是在讀取 InputStream時呼叫 close()方法,就有可能會導致連線池失效了。

    • Android團隊未來的工作會將更多的時間放在優化HttpURLConnection上,它的API簡單,體積較小,因而非常適用於Android專案。壓縮和快取機制可以有效地減少網路訪問的流量,在提升速度和省電方面也起到了較大的作用。

  • 選用建議

    • 如果一個Android應用需要向指定頁面傳送請求,但該頁面並不是一個簡單的頁面,只有當用戶已經登入,而且登入使用者的使用者名稱有效時才可訪問該頁面。如果使用HttpURLConnection來訪問這個被保護的頁面,那麼需要處理的細節就太複雜了。這種情況建議使用HttpClient

    • Android2.3及以上版本建議選用HttpURLConnection,2.2及以下版本建議選用HttpClient。新的應用都建議使用HttpURLConnection。