HttpClient詳解(一)—簡介與請求

簡介


首先說說HttpClient和Http的關係:

  我們知道HTTP是一個客戶端和服務器端請求和應答的標準(TCP)。

  我們通常發起http請求時都在客戶端通過get或post的方式發起(項目中最常用的即通過Ajax實現)。

  不僅如此,在服務端java.net包提供了基本通過HTTP訪問資源的功能,但它沒有提供全面的靈活性和其它很多應用程序需要的

功能。

  HttpClient就是尋求彌補這項空白的組件,可以用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端編程工具包,實

現HTTP協議最新的標準和建議。

 

功能

 

HttpClient 提供的主要的功能:

  1.實現了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)

  2.支持自動轉向

  3.支持 HTTPS 協議

  4.支持代理服務器等

HttpClient 必須的jar包:

  HttpClient:httpclient-4.1.2.jar(最新4.5:http://hc.apache.org/downloads.cgi

  HttpClient用到的jar:httpcore-4.1.2.jar處理常用的編碼和commons-logging-1.1.jar記錄日誌


應用

 

Http方法--執行請求

HttpClient最重要的功能即是執行HTTP方法:

  一個HTTP方法的執行包含一個或多個HTTP請求/HTTP響應交換,通常由HttpClient的內部來處理。而期望用戶提供一個要執行

的請求對象,而HttpClient期望傳輸請求到目標服務器並返回對應的響應對象,或者當執行不成功時拋出異常。

  HttpClientAPI的主要切入點就是定義描述上述規約的HttpClient接口。

使用 HttpClient 進行簡單的請求執行過程 需要以下5個步驟(以get方式爲例):

  1.創建 HttpClient 的實例

    HttpClient httpclient = new DefaultHttpClient();

  2.創建某種連接方法的實例,在這裏是GetMethod。在 GetMethod 的構造函數中傳入待連接的地址

    HttpGet httpget =new HttpGet("http://localhost/");

  3.調用第一步中創建好的實例的execute 方法來執行第二步中創建好的 method 實例

    HttpResponseresponse = httpclient.execute(httpget);

  4.讀取response數據

    調用HttpResponse的getAllHeaders()、getHeaders(Stringname)等方法可獲取服務器的響應頭;調用HttpResponse的  

getEntity()方法可獲取HttpEntity對象,該對象包裝了服務器的響應內容。程序可通過該對象獲取服務器的響應內容。

    HttpEntity entity =response.getEntity();

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

    httpclient.close();

說明

如何理解上面的5個步驟及涉及到的類和方法,簡單點:

  HttpClient看作是一個瀏覽器

  HttpGet即一個Get請求

  HttpPost即一個Post請求

  HttpClient.execute(HttpGet/HttpPost)相當於在瀏覽器或者通過Ajax進行的get和post提交。

  HttpResponsehttp請求後的一個響應

  HttpEntity一個實體對象,我們可以response.getEntity()從響應中獲取數據。

 

對於Post請求,我們可以通過NameValuePair封裝成list在封裝成HttpEntity,用於向服務器端傳參數:

    private ListcreateNameValuePair(Map params)
    {
        List nameValuePairs = new ArrayList();

        String key;

        for(Iterator iterator =params.keySet().iterator(); iterator.hasNext(); nameValuePairs.add(newBasicNameValuePair(key, (String)params.get(key))))

            key = (String)iterator.next();
        return nameValuePairs;

    }

對於Get請求,只有客戶端的代碼newHttpGet(url);將請求數據寫在url中

HttpGet httpget =new HttpGet(url);

小結

  HttpClient比較常用的用於調用WebService接口的應用上,通過對HttpGetHttpPost方式完成在服務端調用外部WebService接口,並對接收到的數據進行處理的應用。接下來將繼續對HttpClient中的細節進行研究學習。HttpClient詳解(一)---請求詳解



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章