码迷,mamicode.com
首页 > Web开发 > 详细

HttpClient学习记录

时间:2019-10-02 20:32:44      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:https   结果   err   nta   param   ted   import   总结   arraylist   

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学习记录

标签:https   结果   err   nta   param   ted   import   总结   arraylist   

原文地址:https://www.cnblogs.com/wangziqiang123/p/11618226.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!