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