一、HttpClient與HttpURLConnection,URLConnection
HttpURLConnection繼承URLConnection,底層socket,最原始通信,使用 HttpURLConnection 發起 HTTP 請求最大的優點是不需要引入額外的依賴。但無法提供額外的功能,如cookie,登錄,同時,也缺乏連接池管理、域名機械控制等特性支持。
HttpClient是apache的一個項目,封裝了很多底層細節。Apache HttpComponents HttpClient 的前身是 Apache Commons HttpClient, 但是 Apache Commons HttpClient 已經停止開發,如果你還在使用它,請切換到 Apache HttpComponents HttpClient 上來。HttpClient相比傳統JDK自帶的URLConnection,增加了易用性和靈活性,它不僅使客戶端發送HTTP請求變得容易,而且也方便了開發人員測試接口(基於Http協議的),即提高了開發的效率,也方便提高代碼的健壯性。
JDK 自帶的 HttpURLConnection 標准庫; Apache HttpComponents HttpClient, 以及基於該庫的 wrapper, 如 Unirest. 非基於 Apache HttpComponents HttpClient, 大量重寫應用層代碼的 HTTP client 組件庫,典型代表是 OkHttp. HttpURLConnectio。
二、OKHttp
由於當前 Apache HttpComponents HttpClient 版本並不支持 HTTP/2, 而 HTTP/2 對於移動客戶端而言,無論是從握手延遲、響應延遲,還是資源開銷看都有相當吸引力。因此這就給了高層次封裝且支持 HTTP/2 的 http client lib 足夠的生存空間。其中最典型的要數OkHttp。
OkHttp 接口設計友好,支持 HTTP/2,並且在弱網和無網環境下有自動檢測和恢復機制,因此,是當前 Android APP 開發中使用最廣泛的 HTTP clilent lib 之一。
另一方面,OkHttp 提供的接口與 Java 9 中 HttpClint 接口比較類似 (嚴格講,應該是 Java 9 借鑒了 OkHttp 等開源庫的接口設計?),因此,對於喜歡減少依賴,鍾情於原生標准庫的開發者來說,在 Java 11 中,從 OkHttp 切換到標准庫是相對容易的。因此,以 OkHttp 為代表的 http 庫以后的使用場景可能會被蠶食一部分。
四、Volley
Volley是google在2013 io大會上推出的網絡通信框架,特別適合處理數據量小,通信頻繁的網絡操作。優點是內部封裝了異步線程,可直接在主線程請求網絡,並處理返回的結果。同時可以取消請求,容易擴展。缺點是:面對大數據量的請求,比如下載表現糟糕,不支持https。Volley的底層在針對android2.3以下系統使用httpclicent,在android2.3以上采用HttpUrlConnection請求網絡。可以參考https://blog.csdn.net/guolin_blog/article/details/17482095
五、Xutils
Xutils是前幾年比較火得一個開源框架,Xutils包含了很多實用的工具類,支持大文件上傳,且有更全面的http請求協議支持,擁有靈活的Orm,支持事件注解且不受代碼混淆影響。Xutils剛問世的時候真是很多屌絲程序猿的福利啊,集成了這么多功能強大的模塊,大家果然都愛不釋手,但是隨着Android版本的升級和人們開發軟件思想的轉變,Xutils也暴露出了很多問題,現在用Xutils的已經不是特別的多了,如果想使用的話,推薦使用比較新的Xutils3。主要用於android,可以參考https://blog.csdn.net/QPC908694753/article/details/77142124。
六、Retrofit
參考
https://juejin.im/post/5bae03b25188255c5442b66f
https://www.cnblogs.com/sharpest/p/7831350.html
https://blog.csdn.net/langtop/article/details/77972855