java httpClient入門

HttpClient是Apache Jakarta Common下的子項目,用來提供高效的、最新的以及功能豐富的支持HTTP協議的客戶端編程工具包,並且支持HTTP協議最新的版本和協議。

步驟如下:

  1. 創建HttpClient對象。

  2. 創建請求方法的實例,並指定請求URL。如果需要發送GET請求,創建HttpGet對象;如果需要發送POST請求,創建HttpPost對象。

  3. 如果需要發送請求參數,可調用HttpGet、HttpPost共同的setParams(HetpParams params)方法來添加請求參數;對於HttpPost對象而言,也可調用setEntity(HttpEntity entity)方法來設置請求參數。

  4. 調用HttpClient對象的execute(HttpUriRequest request)發送請求,該方法返回一個HttpResponse。

  5. 調用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可獲取服務器的響應頭;調用HttpResponse的getEntity()方法可獲取HttpEntity對象,該對象包裝了服務器的響應內容。程序可通過該對象獲取服務器的響應內容。

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


示例代碼:

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就可以了 
}

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