HttpClient学习记录

HttpClient is a HTTP/1.1 compliant HTTP agent implementation based on HttpCore. It also provides reusable components for client-side authentication, HTTP state management, and HTTP connection management. HttpComponents Client is a successor of and replacement for Commons HttpClient 3.x. Users of Commons HttpClient are strongly encouraged to upgrade.

总结: HttpClient 是apache 组织下面的一个用于处理HTTP 请求和响应的开源工具。

需要的jar包:

? httpclient-4.3.6.jar、httpcore-4.3.3.jar、httpmime-4.3.6.jar、commons-codec-1.6.jar。

二、操作步骤

由于HttpClient从4.X开始,基本的get/post 等http请求实现方式与之前版本的写法有很大的差异,所以在此总结一下4.X版本之后的官方推荐写法。

操作顺序:

  1. 创建CloseableHttpClient对象
  2. 创建请求方法实例:HttpGet/HttpPost
  3. (可选)需要请求参数时
    • HttpGet/HttpPost都可以使用setParams方法添加参数(deprecated 已过时)
    • 对于HttpPost方法可以使用SetEntity(HttpEntity entity)参加请求参数
    • 对于HttpGet方法,可以通过拼接url的方式添加请求参数
  4. 调用CloseableHttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个CloseableHttpResponse。
  5. 通过CloseableHttpResponse对象获取服务器的响应内容。
  6. 释放连接。无论执行方法是否成功,都必须释放连接

三、代码实例

      
       1
      
      
       2
      
      
       3
      
      
       4
      
      
       5
      
      
       6
      
      
       7
      
      
       8
      
      
       9
      
      
       10
      
      
       11
      
      
       12
      
      
       13
      
      
       14
      
      
       15
      
      
       16
      
      
       17
      
      
       18
      
      
       19
      
      
       20
      
      
       21
      
      
       22
      
      
       23
      
      
       24
      
      
       25
      
      
       26
      
      
       27
      
      
       28
      
      
       29
      
      
       30
      
      
       31
      
      
       32
      
      
       33
      
      
       34
      
      
       35
      
      
       36
      
      
       37
      
      
       38
      
      
       39
      
      
       40
      
      
       41
      
      
       42
      
      
       43
      
      
       44
      
      
       45
      
      
       46
      
      
       47
      
      
       48
      
      
       49
      
      
       50
      
      
       51
      
      
       52
      
      
       53
      
      
       54
      
      
       55
      
      
       56
      
      
       57
      
      
       58
      
      
       59
      
      
       60
      
      
       61
      
      
       62
      
      
       63
      
      
       64
      
      
       65
      
      
       66
      
      
       67
      
      
       68
      
      
       69
      
      
       70
      
      
       71
      
      
       72
      
      
       73
      
      
       74
      
      
       75
      
      
       76
      
      
       77
      
      
       78
      
      
       79
      
      
       80
      
      
       81
      
      
       82
      
      
       83
      
      
       84
      
      
       85
      
      
       86
      
      
       87
      
      
       88
      
      
       89
      
      
       90
      
      
       91
      
      
       92
      
      
       93
      
      
       94
      
      
       95
      
      
       96
      
      
       97
      
      
       98
      
      
       99
      
      
       100
      
      
       101
      
      
       102
      
      
       103
      
      
       104
      
      
       105
      
      
       106
      
      
       107
      
      
       108
      
      
       109
      
      
       110
      
      
       111
      
      
       112
      
      
       113
      
      
       114
      
      
       115
      
      
       116
      
      
       117
      
      
       118
      
      
       119
      
      
       120
      
      
       121
      
      
       122
      
      
       123
      
      
       124
      
      
       125
      
      
       126
      
      
       127
      
      
       128
      
      
       129
      
      
       130
      
      
       131
      
      
       132
      
      
       133
      
      
       134
      
      
       package com.learn.http;
      
      
      
       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.NameValuePair;
      
      
       import org.apache.http.ParseException;
      
      
       import org.apache.http.client.ClientProtocolException;
      
      
       import org.apache.http.client.entity.UrlEncodedFormEntity;
      
      
       import org.apache.http.client.methods.CloseableHttpResponse;
      
      
       import org.apache.http.client.methods.HttpGet;
      
      
       import org.apache.http.client.methods.HttpPost;
      
      
       import org.apache.http.impl.client.CloseableHttpClient;
      
      
       import org.apache.http.impl.client.HttpClients;
      
      
       import org.apache.http.message.BasicNameValuePair;
      
      
       import org.apache.http.util.EntityUtils;
      
      
      
       public 
       class {
      
      
      	
       public static void main(String[] args) {
      
      		
      
      		
       new HttpSend().post(
       "http://www.baidu.com");
      
      		
       new HttpSend().get(
       "http://www.baidu.com");
      
      
       	}
      
      
      	
       /**
      
      
       	 * 发送 post请求访问本地应用并根据传递参数不同返回不同结果
      
      
       	 */
      
      	
       public void post(String url) {
      
      
      		
       // 创建默认的httpClient实例.
      
      
       		CloseableHttpClient httpclient = HttpClients.createDefault();
      
      		
       // 创建httppost
      
      
       		HttpPost httppost = 
       new HttpPost(url);
      
      		
      
      		
       // 创建参数队列
      
      
       		List<NameValuePair> formparams = 
       new ArrayList<NameValuePair>();
      
      		
       // 添加参数
      
      		
       // formparams.add(new BasicNameValuePair("gg", "1"));
      
      
      
       		UrlEncodedFormEntity uefEntity;
      
      		
       try {
      
      			
       //传入空参数,创建实体对象
      
      
       			uefEntity = 
       new UrlEncodedFormEntity(formparams, 
       "UTF-8");
      
      			
       //设置post对象的实体对象
      
      
       			httppost.setEntity(uefEntity);
      
      
       			System.out.println(
       "executing post request " + httppost.getURI());
      
      			
       //执行post请求
      
      
       			CloseableHttpResponse response = httpclient.execute(httppost);
      
      			
       try {
      
      				
       //获取请求结果对象
      
      
       				HttpEntity entity = response.getEntity();
      
      				
       if (entity != 
       null) {
      
      
       					System.out.println(
       "--------------------------------------");
      
      
       					System.out.println(
       "Response content: " + EntityUtils.toString(entity));
      
      
       					System.out.println(
       "--------------------------------------");
      
      
       				}
      
      
       			} 
       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();
      
      
       			}
      
      
       		}
      
      
       	}
      
      
      	
       /**
      
      
       	 * 发送 get请求
      
      
       	 */
      
      	
       public void get(String url) {
      
      
      		
       // 创建默认的httpClient实例.
      
      
       		CloseableHttpClient httpclient = HttpClients.createDefault();
      
      		
      
      		
       try {
      
      			
       // 封装请求参数
      
      
       			List<NameValuePair> params = 
       new ArrayList<>();
      
      
       			params.add(
       new BasicNameValuePair(
       "cityEname", 
       "henan"));
      
      			
       //转换为键值对
      
      
       			String str = EntityUtils.toString(
       new UrlEncodedFormEntity(params, 
       "UTF-8"));
      
      
       			System.out.println(str);
      
      			
       //创建带参数get请求(示例)
      
      
       			HttpGet httpGet = 
       new HttpGet(url+
       "?"+str);
      
      
      			
       // 创建不带参数get请求
      
      
       			HttpGet httpget = 
       new HttpGet(url);
      
      
       			System.out.println(
       "executing get request " + httpget.getURI());
      
      			
       // 执行get请求.
      
      
       			CloseableHttpResponse response = httpclient.execute(httpget);
      
      			
       try {
      
      				
       // 获取响应实体
      
      
       				HttpEntity entity = response.getEntity();
      
      
       				System.out.println(
       "--------------------------------------");
      
      				
       // 打印响应状态
      
      
       				System.out.println(response.getStatusLine());
      
      				
       if (entity != 
       null) {
      
      					
       // 打印响应内容长度
      
      
       					System.out.println(
       "Response content length: " + entity.getContentLength());
      
      					
       // 打印响应内容
      
      
       					System.out.println(
       "Response content: " + EntityUtils.toString(entity));
      
      
       				}
      
      
       				System.out.println(
       "------------------------------------");
      
      
       			} 
       finally {
      
      
       				response.close();
      
      
       			}
      
      
       		} 
       catch (ClientProtocolException e) {
      
      
       			e.printStackTrace();
      
      
       		} 
       catch (ParseException e) {
      
      
       			e.printStackTrace();
      
      
       		} 
       catch (IOException e) {
      
      
       			e.printStackTrace();
      
      
       		} 
       finally {
      
      			
       // 关闭连接,释放资源
      
      			
       try {
      
      
       				httpclient.close();
      
      
       			} 
       catch (IOException e) {
      
      
       				e.printStackTrace();
      
      
       			}
      
      
       		}
      
      
       	}
      
      
       }
      

原文:大专栏  HttpClient学习记录