一、简介

       HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议

 

二、特性

  1、基于标准的java语言

  2、以可扩展的面向对象的结构实现了GET、POST、PUT等Http的全部方法

  3、支持https协议

  4、 Request的输出流可以避免流中内容直接缓冲到socket服务器。

  5、Response的输入流可以有效的从socket服务器直接读取相应内容。

 

三、使用方法

  

  1、创建HttpClient对象。(推荐用CloseableHttpClient,HttpClient是历史遗留版本,官方推荐使用CloseableHttpClient)

**注:两者的依赖不同

  2、创建请求方法的实例,并指定请求uri。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。

  3、如果需要发送请求参数,直接在请求地址后拼接参数(√);对于HttpPost对象而言,也可先设置参数队列,然后调用setEntity(HttpEntity entity)方法来设置请求参数。

  4、调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse/CloseableHttpResponse。

  5、调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,如果出现乱码,可以将HttpEntity对象改成StringEntity,可通过该对象获取服务器的响应内容。

  6、释放连接,无论方法是否执行成功,都应当必须释放

 

所需依赖maven

<!--HttpClient-->
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>

<!--CloseableHttpClient-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.10</version>
</dependency>

 

 

四、案例

     以get、post、文件上传举例

 

Post:(有参数)

```java
/** 
* 表单提交(未封装方法) 
*/   

public class Second {
    // *创建默认的httpClient实例(CloseableHttpClient).
    static CloseableHttpClient httpclient = HttpClients.createDefault();
    public static void main(String[] args){
    // *创建HttpPost
    HttpPost httppost = new HttpPost("http://localhost:8080/warnWeathers/save");
    // *创建参数队列
    List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        nvps.add(new BasicNameValuePair("winfo", "红色降雨预警,请勿随意外出游玩"));
        nvps.add(new BasicNameValuePair("wtype", "红色降雨预警"));
        nvps.add(new BasicNameValuePair("warea", "香洲,斗门"));
        nvps.add(new BasicNameValuePair("wdays", "2"));
     UrlEncodedFormEntity uefEntity;
        try {
//          设置实体类参数编码格式
        uefEntity = new UrlEncodedFormEntity(nvps, "UTF-8");
//        *发送请求参数
        httppost.setEntity(uefEntity);
//        测试:输出请求地址
//        System.out.println("executing request " + httppost.getURI());
//       *调用HttpClient对象的execute发送请求方法并返回一个httpClient/CloseableHttpResponse对象
        CloseableHttpResponse response = httpclient.execute(httppost);
        try {
//       *调用HttpResponse的getEntity()方法可获取HttpEntity对象
//       HttpEntity-->StringEntity  解决乱码问题
            HttpEntity entity = response.getEntity();
//       获取响应内容以及响应头
            String message = EntityUtils.toString(entity, "UTF-8");
            Header[] allHeaders = response.getAllHeaders();
            if (message != null) {
                System.out.println("响应头:"+allHeaders);
                System.out.println("Response content: " + message);
            }
//       *关闭连接,释放资源            
        } finally {
            response.close();
        }
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e1) {
        e1.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {

        try {
            httpclient.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Post请求示例代码

相关文章: