簡介
首先說說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接口的應用上,通過對HttpGet和HttpPost方式完成在服務端調用外部WebService接口,並對接收到的數據進行處理的應用。接下來將繼續對HttpClient中的細節進行研究學習。HttpClient詳解(一)---請求詳解