1. 程式人生 > >HttpClient 該知道一些概念

HttpClient 該知道一些概念

繼承 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) 統一資源名稱
  • 整體關系:
技術分享
  • 舉個栗子麽:
比如有一個虛擬地址,首先這是一個URI:我們分析: 是定義如何訪問資源的方式。是資源存放的位置,那麽,在這個栗子中,是資源。
  • URL是URI的一個子集,告訴我們訪問網絡位置的方式,
  • URN是URI的子集,包括名字(給定的命名空間內),但不包括訪問方式

四、調用步驟:
  1. 創建 HttpClient 對象
  2. 創建請求方法的實例,並指定URL。
    1. GET 請求,創建 HttpGet 對象
    2. POST 請求,創建 HttpPost 對象
  3. 調用 SetParams(HttpParams params) 方法來添加請求參數, 對於 HttpPost 對象而言,也可以調用 setEntity(HttpEntity entity) 方法來設置請求參數
  4. 調用 HttpClient 對象的 execute(HttpUriRequest request) 發送請求,該方法返回一個 HttpResponse
  5. 調用 HttpResponse 的 getAllHeaders()、getHeaders(String name) 等方法可獲取服務器的響應頭;調用 HttpResponse 的 getEntity() 方法可獲取 HttpEntity 對象,該對象包裝了服務器的相應內容。程序可以通過獲取服務器的相應內容

  6. 釋放連接,無論執行方法是否成功,都必須釋放連接
例如下圖: 技術分享

五、調用細節:

  • 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 該知道一些概念