HttpClient是Apache Jakarta Common下的子項目,用來提供高效的、最新的以及功能豐富的支持HTTP協議的客戶端編程工具包,並且支持HTTP協議最新的版本和協議。
步驟如下:
創建HttpClient對象。
創建請求方法的實例,並指定請求URL。如果需要發送GET請求,創建HttpGet對象;如果需要發送POST請求,創建HttpPost對象。
如果需要發送請求參數,可調用HttpGet、HttpPost共同的setParams(HetpParams params)方法來添加請求參數;對於HttpPost對象而言,也可調用setEntity(HttpEntity entity)方法來設置請求參數。
調用HttpClient對象的execute(HttpUriRequest request)發送請求,該方法返回一個HttpResponse。
調用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可獲取服務器的響應頭;調用HttpResponse的getEntity()方法可獲取HttpEntity對象,該對象包裝了服務器的響應內容。程序可通過該對象獲取服務器的響應內容。
釋放連接。無論執行方法是否成功,都必須釋放連接
示例代碼:
package cn.tim;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;public class HttpClientTest { public static void main(String[] args) { HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost("http://localhost:8080/TimOne/category/queryCategory.do"); List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("type", "")); params.add(new BasicNameValuePair("page", "1")); params.add(new BasicNameValuePair("rows", "5")); UrlEncodedFormEntity entity = null; try { entity = new UrlEncodedFormEntity(params,"utf-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } httpPost.setEntity(entity); try { HttpResponse httpResponse = httpClient.execute(httpPost); if(httpResponse.getStatusLine().getStatusCode() == 200){ System.out.println("請求和響應成功"); HttpEntity httpEntity = httpResponse.getEntity(); String response = EntityUtils.toString(httpEntity); System.out.println(response); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
上面的代碼解釋如下:
HttpClient:是一個接口
首先需要先創建一個Default HttpClient的實例
HttpClient httpClient=new DefaultHttpClient();
發送GET請求:
先創建一個HttpGet對象,傳入目標的網絡地址,然後調用HttpClient的execute()方法即可:
HttpGet HttpGet=new HttpGet(“http://www.baidu.com”);
httpClient.execute(httpGet);
發送POST請求:
創建一個HttpPost對象,傳入目標的網絡地址:
HttpPost httpPost=new HttpPost(“http://www.baidu.com”);
通過一個NameValuePair集合來存放待提交的參數,並將這個參數集合傳入到一個UrlEncodedFormEntity中,然後調用HttpPost的setEntity()方法將構建好的UrlEncodedFormEntity傳入:
List params=new ArrayList();
params.add(new BasicNameValuePair(“username”,”admin”));
params.add(new BasicNameValuePair(“password”,”123456”));
UrlEncodedFormEntity entity=new UrlEncodedFormEntity(params,”utf-8”);
httpPost.setEntity(entity);
調用HttpClient的execute()方法,並將HttpPost對象傳入即可:
HttpClient.execute(HttpPost);
執行execute()方法之後會返回一個HttpResponse對象,服務器所返回的所有信息就保護在HttpResponse裏面.
先取出服務器返回的狀態碼,如果等於200就說明請求和響應都成功了:
If(httpResponse.getStatusLine().getStatusCode()==200){
//請求和響應都成功了
HttpEntity entity=HttpResponse.getEntity();//調用getEntity()方法獲取到一個HttpEntity實例
String response=EntityUtils.toString(entity,”utf-8”);//用EntityUtils.toString()這個靜態方法將HttpEntity轉換成字符串,防止服務器返回的數據帶有中文,所以在轉換的時候將字符集指定成utf-8就可以了
}