天天看點

HttpClient_01 簡介HttpClient_01 簡介

HttpClient_01 簡介

什麼是HttpClient

HttpClient 是 Apache Jakarta Common 下的子項目,是一個用來跨項目通路的中間件 ,用來提供高效的、最新的、功能豐富的支援 HTTP 協定的用戶端程式設計工具包,并且它支援 HTTP 協定最新的版本和建議。HttpClient 已經應用在很多的項目中,比如 Apache Jakarta 上很著名的另外兩個開源項目 Cactus 和 HTMLUnit 都使用了 HttpClient。

HttpClient 相比傳統 JDK 自帶的 URLConnection(URLConnection是一個抽象類,表示指向URL指定資源的活動連接配接。),增加了易用性和靈活性,它不僅使用戶端發送 HTTP 請求變得容易,而且也友善了開發人員測試接口(基于 HTTP 協定的),即提高了開發的效率,也友善提高代碼的實用性。

Apache HttpClient 特性

  • 基于标準、純淨的 Java 語言。實作了 HTTP 1.0 和 HTTP 1.1
  • 以可擴充的面向對象的結構實作了 HTTP 全部的方法
  • 支援 HTTPS 協定。
  • 通過 HTTP 代理建立透明的連接配接。
  • 利用 CONNECT 方法通過 HTTP 代理建立隧道的 HTTPS 連接配接。
  • 插件式的自定義認證方案。
  • 連接配接管理器支援多線程應用。(支援設定最大連接配接數,同時支援設定每個主機的最大連接配接數,發現并關閉過期的連接配接。)
  • 自動處理 Set-Cookie 中的 Cookie。
  • 插件式的自定義 Cookie 政策。
  • Response 的輸入流可以有效的從 Socket 伺服器直接讀取相應内容
  • Request 的輸出流可以避免流中内容直接緩沖到 Socket 伺服器。
  • 直接擷取伺服器發送的 response code 和 headers。
  • 設定連接配接逾時的能力。

Apache HttpClient 使用流程

  • 建立 HttpClient 對象。
  • 建立請求方法的執行個體,并指定請求 URL。如果需要發送 GET 請求,創 建 HttpGet 對象;如果需要發送 POST 請求,建立 HttpPost 對象。
  • 如果需要發送請求參數,可調用 HttpGet、HttpPost 共同的 setParams(HttpParams params) 方法來添加請求參數;對于 HttpPost 對象而言,也可調用 setEntity(HttpEntity entity) 方法來設定請求參數。
  • 調用 HttpClient 對象的 execute(HttpUriRequest request) 發送請求,該方法傳回一個 HttpResponse。
  • 調用 HttpResponse 的 getAllHeaders()、getHeaders(String name) 等方法可擷取伺服器的響應頭;調用 HttpResponse 的 getEntity() 方法可擷取 HttpEntity 對象,該對象包裝了伺服器的響應内容。程式可通過該對象擷取伺服器的響應内容。
  • 釋放連接配接。無論執行方法是否成功,都必須釋放連接配接。

Apache HttpClient常用方法

  • EntityUtils()

    在httpclient 請求的時候,使用EntityUtils 對傳回的結果進行字元串的轉換

  • NameValuePair()

    一個集合來存放待送出的參數 并将這個參數集合傳入到一個UrlEncodedFormEntity中,然後調用HttpPost的setEntity()方法将建構好的UrlEncodedFormEntity傳入

  • getStatusLine().getStatusCode()

    擷取響應的狀态 狀态碼

  • getEntity()

    擷取資料 包裝了伺服器的響應内容

  • setParams(HttpParams params)

    添加請求參數

  • setEntity(HttpEntity entity)

    設定請求參數

  • execute(HttpUriRequest request)

    執行請求

HTTP 請求的 GET 與 POST 方式的差別

  • get是從伺服器上擷取資料,post是向伺服器傳送資料。
  • get是把參數資料隊列加到送出表單的ACTION屬性所指的URL中,值和表單内各個字段一一對應,在URL中可以看到。post是通過HTTP post機制,将表單内各個字段與其内容放置在HTML HEADER内一起傳送到ACTION屬性所指的URL位址。使用者看不到這個過程。
  • 對于get方式,伺服器端用Request.QueryString擷取變量的值,對于post方式,伺服器端用Request.Form擷取送出的資料。
  • get傳送的資料量較小,不能大于2KB。post傳送的資料量較大,一般被預設為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。
  • get安全性非常低,post安全性較高。但是執行效率卻比Post方法好。