HttpClient 該知道一些概念
阿新 • • 發佈:2017-07-31
繼承 exc ear exce pve lencod style phrase pat
四、調用步驟:
HttpClient 該知道不該知道的一些事
一、簡介:
- Apache開源項目: http://hc.apache.org/
- 基於HTTP協議提供強大的支持,構建HTTP客戶端應用程序
- 執行HTTP協議時,包含了HTTP請求和響應不同狀態,可以對關鍵參數設置和獲取
二、HTTP協議(掃盲)
- HTTP請求包含三部分,分別由請求行(請求方法)、請求頭(消息報文)、請求正文組成。
- HTTP請求詳解:
- HTTP 響應詳解
三、URI URL和URN區別:
- URI(Uniform Resource Identifier) 統一資源標識符
- URL(Uniform Resource Locator) 統一資源定位符
- URN(Uniform Resource Name) 統一資源名稱
- 整體關系:
- 舉個栗子麽:
- URL是URI的一個子集,告訴我們訪問網絡位置的方式,
- URN是URI的子集,包括名字(給定的命名空間內),但不包括訪問方式
四、調用步驟:
- 創建 HttpClient 對象
- 創建請求方法的實例,並指定URL。
- GET 請求,創建 HttpGet 對象
- POST 請求,創建 HttpPost 對象
- 調用 SetParams(HttpParams params) 方法來添加請求參數, 對於 HttpPost 對象而言,也可以調用 setEntity(HttpEntity entity) 方法來設置請求參數
- 調用 HttpClient 對象的 execute(HttpUriRequest request) 發送請求,該方法返回一個 HttpResponse
- 調用 HttpResponse 的 getAllHeaders()、getHeaders(String name) 等方法可獲取服務器的響應頭;調用 HttpResponse 的 getEntity() 方法可獲取 HttpEntity 對象,該對象包裝了服務器的相應內容。程序可以通過獲取服務器的相應內容
- 釋放連接,無論執行方法是否成功,都必須釋放連接
五、調用細節:
- HttpClient提供了URIBuilder類來簡化和修改請求URI
- 在Response中幾個關鍵參數獲取:
- 獲取給定類型的所有頭部信息最有效的方式是使用HeaderIterator接口:
- 為了保證系統資源被正確地釋放,我們要麽管理HTTP實體流,要麽關閉http響應。
- 關閉HTTP實體內容流和關閉HTTP響應的區別,前者通過消耗掉HTTP實體內容來保持相關HTTP連接,然而後者會立即關閉,丟棄HTTP連接。
- HttpClient 推薦使用 HttpEntity 的 getContent() 方法或者 HttpEntity 的 writeTo(OutputStream) 方法讀取Http實體內容。
- EntityUtils 提供的方法可以以字符串或者字節數組的形式讀取 Http 實體,但是一般不建議,確保相應的實體長度不大。
- 希望把 Http 實體內容緩存在內存或者磁盤上,最簡單方法就是把 Http Entity 轉化為 BufferedHttpEntity,
- HttpClient 提供了一些類,這些類可以通過http連接高效地輸出Http實體內容。
- HttpClient 提供的這幾個類涵蓋的常見的數據類型,如String,byte 數組,輸入流,和文件類型:StringEntity,ByteArrayEntity,InputStreamEntity,FileEntity。
- 請註意由於 InputStreamEntity 只能從下層的數據流中讀取一次,所以它是不能重復的。推薦,通過繼承 HttpEntity 這個自包含的類來自定義HttpEntity 類,而不是直接使用 InputStreamEntity 這個類。FileEntity 就是一個很好的起點(FileEntity 就是繼承的 HttpEntity)。
- 模擬 HTML 表單提交
- 設置傳輸編碼方式(1.0不支持)
- 處理http響應的方法就是使用ResponseHandler接口,這個接口中有handleResponse(HttpResponse response)方法。使用這個方法,用戶完全不用關心http連接管理器。當使用ResponseHandler時,HttpClient會自動地將Http連接釋放給Http管理器,即使http請求失敗了或者拋出了異常。
HttpClient 該知道一些概念