服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 使用HttpClient调用接口的实例讲解

使用HttpClient调用接口的实例讲解

2021-01-14 16:140001 Java教程

下面小编就为大家带来一篇使用HttpClient调用接口的实例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一,编写返回对象

?
1
2
3
4
5
6
7
8
public class HttpResult {
// 响应的状态码
private int code;
 
// 响应的响应体
private String body;
get/set…
}

二,封装HttpClient

?
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
package cn.xxxxxx.httpclient;
 
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
 
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.utils.URIBuilder;
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 APIService {
 
 private CloseableHttpClient httpClient;
 
 public APIService() {
  // 1 创建HttpClinet,相当于打开浏览器
  this.httpClient = HttpClients.createDefault();
 }
 
 /**
  * 带参数的get请求
  *
  * @param url
  * @param map
  * @return
  * @throws Exception
  */
 public HttpResult doGet(String url, Map<String, Object> map) throws Exception {
 
  // 声明URIBuilder
  URIBuilder uriBuilder = new URIBuilder(url);
 
  // 判断参数map是否为非空
  if (map != null) {
   // 遍历参数
   for (Map.Entry<String, Object> entry : map.entrySet()) {
    // 设置参数
    uriBuilder.setParameter(entry.getKey(), entry.getValue().toString());
   }
  }
 
  // 2 创建httpGet对象,相当于设置url请求地址
  HttpGet httpGet = new HttpGet(uriBuilder.build());
 
  // 3 使用HttpClient执行httpGet,相当于按回车,发起请求
  CloseableHttpResponse response = this.httpClient.execute(httpGet);
 
  // 4 解析结果,封装返回对象httpResult,相当于显示相应的结果
  // 状态码
  // response.getStatusLine().getStatusCode();
  // 响应体,字符串,如果response.getEntity()为空,下面这个代码会报错,所以解析之前要做非空的判断
  // EntityUtils.toString(response.getEntity(), "UTF-8");
  HttpResult httpResult = null;
  // 解析数据封装HttpResult
  if (response.getEntity() != null) {
   httpResult = new HttpResult(response.getStatusLine().getStatusCode(),
     EntityUtils.toString(response.getEntity(), "UTF-8"));
  } else {
   httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
  }
 
  // 返回
  return httpResult;
 }
 
 /**
  * 不带参数的get请求
  *
  * @param url
  * @return
  * @throws Exception
  */
 public HttpResult doGet(String url) throws Exception {
  HttpResult httpResult = this.doGet(url, null);
  return httpResult;
 }
 
 /**
  * 带参数的post请求
  *
  * @param url
  * @param map
  * @return
  * @throws Exception
  */
 public HttpResult doPost(String url, Map<String, Object> map) throws Exception {
  // 声明httpPost请求
  HttpPost httpPost = new HttpPost(url);
 
  // 判断map不为空
  if (map != null) {
   // 声明存放参数的List集合
   List<NameValuePair> params = new ArrayList<NameValuePair>();
 
   // 遍历map,设置参数到list中
   for (Map.Entry<String, Object> entry : map.entrySet()) {
    params.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
   }
 
   // 创建form表单对象
   UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params, "UTF-8");
 
   // 把表单对象设置到httpPost中
   httpPost.setEntity(formEntity);
  }
 
  // 使用HttpClient发起请求,返回response
  CloseableHttpResponse response = this.httpClient.execute(httpPost);
 
  // 解析response封装返回对象httpResult
  HttpResult httpResult = null;
  if (response.getEntity() != null) {
   httpResult = new HttpResult(response.getStatusLine().getStatusCode(),
     EntityUtils.toString(response.getEntity(), "UTF-8"));
  } else {
   httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
  }
 
  // 返回结果
  return httpResult;
 }
 
 /**
  * 不带参数的post请求
  *
  * @param url
  * @return
  * @throws Exception
  */
 public HttpResult doPost(String url) throws Exception {
  HttpResult httpResult = this.doPost(url, null);
  return httpResult;
 }
 
 /**
  * 带参数的Put请求
  *
  * @param url
  * @param map
  * @return
  * @throws Exception
  */
 public HttpResult doPut(String url, Map<String, Object> map) throws Exception {
  // 声明httpPost请求
  HttpPut httpPut = new HttpPut(url);
 
  // 判断map不为空
  if (map != null) {
   // 声明存放参数的List集合
   List<NameValuePair> params = new ArrayList<NameValuePair>();
 
   // 遍历map,设置参数到list中
   for (Map.Entry<String, Object> entry : map.entrySet()) {
    params.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
   }
 
   // 创建form表单对象
   UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params, "UTF-8");
 
   // 把表单对象设置到httpPost中
   httpPut.setEntity(formEntity);
  }
 
  // 使用HttpClient发起请求,返回response
  CloseableHttpResponse response = this.httpClient.execute(httpPut);
 
  // 解析response封装返回对象httpResult
  HttpResult httpResult = null;
  if (response.getEntity() != null) {
   httpResult = new HttpResult(response.getStatusLine().getStatusCode(),
     EntityUtils.toString(response.getEntity(), "UTF-8"));
  } else {
   httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
  }
 
  // 返回结果
  return httpResult;
 }
 
 /**
  * 带参数的Delete请求
  *
  * @param url
  * @param map
  * @return
  * @throws Exception
  */
 public HttpResult doDelete(String url, Map<String, Object> map) throws Exception {
 
  // 声明URIBuilder
  URIBuilder uriBuilder = new URIBuilder(url);
 
  // 判断参数map是否为非空
  if (map != null) {
   // 遍历参数
   for (Map.Entry<String, Object> entry : map.entrySet()) {
    // 设置参数
    uriBuilder.setParameter(entry.getKey(), entry.getValue().toString());
   }
  }
 
  // 2 创建httpGet对象,相当于设置url请求地址
  HttpDelete httpDelete = new HttpDelete(uriBuilder.build());
 
  // 3 使用HttpClient执行httpGet,相当于按回车,发起请求
  CloseableHttpResponse response = this.httpClient.execute(httpDelete);
 
  // 4 解析结果,封装返回对象httpResult,相当于显示相应的结果
  // 状态码
  // response.getStatusLine().getStatusCode();
  // 响应体,字符串,如果response.getEntity()为空,下面这个代码会报错,所以解析之前要做非空的判断
  // EntityUtils.toString(response.getEntity(), "UTF-8");
  HttpResult httpResult = null;
  // 解析数据封装HttpResult
  if (response.getEntity() != null) {
   httpResult = new HttpResult(response.getStatusLine().getStatusCode(),
     EntityUtils.toString(response.getEntity(), "UTF-8"));
  } else {
   httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
  }
 
  // 返回
  return httpResult;
 }
 
}

三,调用接口

  1. package cn.xxxxxx.httpclient.test; 
  2.  
  3. import java.util.HashMap; 
  4. import java.util.Map; 
  5.  
  6. import org.junit.Before; 
  7. import org.junit.Test; 
  8.  
  9. import cn.itcast.httpclient.APIService; 
  10. import cn.itcast.httpclient.HttpResult; 
  11.  
  12. public class APIServiceTest { 
  13.  
  14.  private APIService apiService; 
  15.  
  16.  @Before 
  17.  public void init() { 
  18.   this.apiService = new APIService(); 
  19.  } 
  20.  
  21.  // 查询 
  22.  @Test 
  23.  public void testQueryItemById() throws Exception { 
  24.   // http://manager.aaaaaa.com/rest/item/interface/{id} 
  25.  
  26.   String url = "http://manager.aaaaaa.com/rest/item/interface/42"
  27.  
  28.   HttpResult httpResult = this.apiService.doGet(url); 
  29.  
  30.   System.out.println(httpResult.getCode()); 
  31.   System.out.println(httpResult.getBody()); 
  32.  
  33.  } 
  34.  
  35.  // 新增 
  36.  @Test 
  37.  public void testSaveItem() throws Exception { 
  38.   // http://manager.aaaaaa.com/rest/item/interface/{id} 
  39.  
  40.   String url = "http://manager.aaaaaa.com/rest/item/interface"
  41.  
  42.   Map<String, Object> map = new HashMap<String, Object>(); 
  43.   // title=测试RESTful风格的接口&price=1000&num=1&cid=888&status=1 
  44.   map.put("title""测试APIService调用新增接口"); 
  45.   map.put("price""1000"); 
  46.   map.put("num""1"); 
  47.   map.put("cid""666"); 
  48.   map.put("status""1"); 
  49.  
  50.   HttpResult httpResult = this.apiService.doPost(url, map); 
  51.  
  52.   System.out.println(httpResult.getCode()); 
  53.   System.out.println(httpResult.getBody()); 
  54.  
  55.  } 
  56.  
  57.  // 修改 
  58.  
  59.  @Test 
  60.  public void testUpdateItem() throws Exception { 
  61.   // http://manager.aaaaaa.com/rest/item/interface/{id} 
  62.  
  63.   String url = "http://manager.aaaaaa.com/rest/item/interface"
  64.  
  65.   Map<String, Object> map = new HashMap<String, Object>(); 
  66.   // title=测试RESTful风格的接口&price=1000&num=1&cid=888&status=1 
  67.   map.put("title""测试APIService调用修改接口"); 
  68.   map.put("id""44"); 
  69.  
  70.   HttpResult httpResult = this.apiService.doPut(url, map); 
  71.  
  72.   System.out.println(httpResult.getCode()); 
  73.   System.out.println(httpResult.getBody()); 
  74.  
  75.  } 
  76.  
  77.  // 删除 
  78.  @Test 
  79.  public void testDeleteItemById() throws Exception { 
  80.   // http://manager.aaaaaa.com/rest/item/interface/{id} 
  81.  
  82.   String url = "http://manager.aaaaaa.com/rest/item/interface/44"
  83.  
  84.   HttpResult httpResult = this.apiService.doDelete(url, null); 
  85.  
  86.   System.out.println(httpResult.getCode()); 
  87.   System.out.println(httpResult.getBody()); 
  88.  
  89.  } 
  90.  

以上这篇使用HttpClient调用接口的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:http://www.cnblogs.com/javaxiaoxin/archive/2017/10/06/7633017.html

延伸 · 阅读

精彩推荐