HttpClient学习记录

Posted wangziqiang123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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学习记录


以上是关于HttpClient学习记录的主要内容,如果未能解决你的问题,请参考以下文章

关于HttpClient的学习心得,请求参数中文乱码问题

接口测试“八重天”---HttpClient

打开调试日志记录时,apache httpclient 以明文形式记录密码

如何记录传出的 HttpClient 请求?

使用 HttpClient 时记录请求/响应消息

记录一个简单的HttpClient抓取页面内容