Android的三种http请求方式的区别
PHP中文网
PHP中文网 2017-04-17 17:45:01
0
2
604

关于Android的三种http请求方式:
(1)okhttp
(2)httpURLConnection
(3)httpClient

谁熟悉的能介绍一下,并解析一下区别呢?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回覆(2)
小葫芦

這個問題有點問題,這並不是三種方式,okhttp只是對網路存取的一個更高層的封裝,httpURLConnection和httpClient是具體兩種實現存取的方式。
1)、HttpClient
HttpClient是Apache Jakarta Common下的子項目,用來提供高效的、最新的、功能豐富的支援HTTP協定的客戶端程式設計工具包,並且它支援HTTP協定的最新版本和建議。

特點:

  1. 基於標準、純淨的Java語言。實現了Http1.0和Http1.1

  2. 以可擴展的物件導向的結構實現了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。

  3. 支援HTTPS協定。

  4. 透過Http代理建立透明的連線。

  5. 利用CONNECT方法透過Http代理建立隧道的https連接。

  6. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos認證方案。

  7. 插件式的自訂認證方案。

  8. 便攜可靠的套接字工廠使它更容易的使用第三方解決方案。

  9. 連線管理器支援多執行緒應用。支援設定最大連線數,同時支援設定每個主機的最大連線數,發現並關閉過期的連線。

  10. 自動處理Set-Cookie中的Cookie。

  11. 插件式的自訂Cookie策略。

  12. Request的輸出流可以避免流中內容直接緩衝到socket伺服器。

  13. Response的輸入流可以有效的從socket伺服器直接讀取對應內容。

  14. 在http1.0和http1.1中利用KeepAlive保持持久連結。

  15. 直接取得伺服器發送的response code和 headers。

  16. 設定連接超時的能力。
    使用方法

使用HttpClient發送請求、接收回應很簡單,一般需要如下幾步即可。

  1. 建立HttpClient物件。

  2. 建立請求方法的實例,並指定請求URL。如果需要傳送GET請求,建立HttpGet物件;如果需要傳送POST請求,建立HttpPost物件。

  3. 如果需要傳送請求參數,可呼叫HttpGet、HttpPost共同的setParams(HetpParams params)方法來新增請求參數;對於HttpPost物件而言,也可呼叫setEntity(HttpEntity entity)方法來設定請求參數。

  4. 呼叫HttpClient物件的execute(HttpUriRequest request)傳送請求,該方法傳回一個HttpResponse。

  5. 呼叫HttpResponse的getAllHeaders()、getHeaders(String name)等方法可取得伺服器的回應頭;呼叫HttpResponse的getEntity()方法可取得HttpEntity對象,該物件包裝了伺服器的回應內容。程式可透過該物件取得伺服器的回應內容。

  6. 釋放連接。無論執行方法是否成功,都必須釋放連線

2)、HttpURLConnection
直接幫你找圖吧

3)okhttp
這個你搜一下網上解析一堆,我就不搬運了

這裡要說一點的是:在Android 2.3以上版本,盡量使用HttpURLConnection,而在Android 2.2及以下版本,盡量使用HttpClient。
因為:
HttpClient
DefaultHttpClient和它的兄弟AndroidHttpClient都是HttpClient具體的實作類,它們都擁有眾多的API,而且實作比較穩定,bug數量也很少。
但同時也由於HttpClient的API數量過多,使得我們很難在不破壞相容性的情況下對它進行升級和擴展,所以目前Android團隊在提升和優化HttpClient方面的工作態度並不積極。
HttpURLConnection
HttpURLConnection是一種多用途、輕量級的HTTP客戶端,使用它來進行HTTP操作可以適用於大多數的應用程式。雖然HttpURLConnection的API提供的比較簡單,但同時這也使得我們可以更容易去使用和擴展它。
不過在Android 2.2版本之前,HttpURLConnection一直存在著一些令人厭煩的bug。比方說對一個可讀的InputStream呼叫close()方法時,就有可能會導致連線池失效了。那我們通常的解決方法就是直接停用掉連接池的功能

左手右手慢动作

差別太大,展開得話費不少口舌,就簡單講一下吧。

HttpClient是Java界比較優秀的一個HTTP客戶端工具包,所以最初Android也把它納入到支援中,希望大家可以方便的使用它進行HTTP請求。然而Android最初納入的居然是HttpClient的測試版,這就導致之後在Android中使用HttpClient可謂Bug百出。而Android的工程師們似乎不打算解決這個問題,甚至在後來的框架裡直接把HttpClient給踢了出去,所以基本上就不建議在Android使用HttpClient了。

為什麼Android願意拋棄HttpClient?一個重要的原因是他們更期望使用HttpURLConnection。 HttpURLConnection屬於Java API的範疇,相較於HttpClient這種第三方函式庫,HttpURLConnection更容易掌握在Google自己手中。不過HttpURLConnection封裝比較簡單,對HTTP請求的處理算是比較底層吧,使用起來並不是特別方便。

OkHttp和HttpClient差不多,也是第三方函式庫。不過它的封裝相對高層一些,也就是更簡單易用一些,而且它對Android有專門的支持,比HttpClient那種爛尾工程好很多。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板