博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java httpclient 工具_spring整合httpClient工具类
阅读量:1542 次
发布时间:2019-04-21

本文共 3844 字,大约阅读时间需要 12 分钟。

本文整合基于httpclient目前最新版本4.5.1

首先加入httpclient的依赖

org.apache.httpcomponents

httpclient

4.5.1

接下来spring-http的配置文件:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

destroy-method="close">

factory-method="build" scope="prototype">

factory-method="build">

httpclient.properties的配置文件:

#设置连接总数

http.maxTotal=500

#设置每个主机最大的并发数

http.defaultMaxPerRoute=100

#设置创建连接的最长时间

http.connectTimeout=2000

#从连接池中获取到连接的最长时间

http.connectionRequestTimeout=500

#数据传输的最长时间

http.socketTimeout=6000

#空闲时间(用于定期清理空闲连接)

http.maxIdleTime = 1

httpclient封装的工具类:

@Service

public class ApiService {

@Autowired

private CloseableHttpClient httpClient;

@Autowired

private RequestConfig requestConfig;

/**

* 执行get请求,200返回响应内容,其他状态码返回null

*

* @param url

* @return

* @throws IOException

*/

public String doGet(String url) throws IOException {

//创建httpClient对象

CloseableHttpResponse response = null;

HttpGet httpGet = new HttpGet(url);

//设置请求参数

httpGet.setConfig(requestConfig);

try {

//执行请求

response = httpClient.execute(httpGet);

//判断返回状态码是否为200

if (response.getStatusLine().getStatusCode() == 200) {

return EntityUtils.toString(response.getEntity(), "UTF-8");

}

} finally {

if (response != null) {

response.close();

}

}

return null;

}

/**

* 执行带有参数的get请求

*

* @param url

* @param paramMap

* @return

* @throws IOException

* @throws URISyntaxException

*/

public String doGet(String url, Map paramMap) throws IOException, URISyntaxException {

URIBuilder builder = new URIBuilder(url);

for (String s : paramMap.keySet()) {

builder.addParameter(s, paramMap.get(s));

}

return doGet(builder.build().toString());

}

/**

* 执行post请求

*

* @param url

* @param paramMap

* @return

* @throws IOException

*/

public HttpResult doPost(String url, Map paramMap) throws IOException {

HttpPost httpPost = new HttpPost(url);

//设置请求参数

httpPost.setConfig(requestConfig);

if (paramMap != null) {

List parameters = new ArrayList();

for (String s : paramMap.keySet()) {

parameters.add(new BasicNameValuePair(s, paramMap.get(s)));

}

//构建一个form表单式的实体

UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters, Charset.forName("UTF-8"));

//将请求实体放入到httpPost中

httpPost.setEntity(formEntity);

}

//创建httpClient对象

CloseableHttpResponse response = null;

try {

//执行请求

response = httpClient.execute(httpPost);

return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString(response.getEntity()));

} finally {

if (response != null) {

response.close();

}

}

}

/**

* 执行post请求

*

* @param url

* @return

* @throws IOException

*/

public HttpResult doPost(String url) throws IOException {

return doPost(url, null);

}

/**

* 提交json数据

*

* @param url

* @param json

* @return

* @throws ClientProtocolException

* @throws IOException

*/

public HttpResult doPostJson(String url, String json) throws ClientProtocolException, IOException {

// 创建http POST请求

HttpPost httpPost = new HttpPost(url);

httpPost.setConfig(this.requestConfig);

if (json != null) {

// 构造一个请求实体

StringEntity stringEntity = new StringEntity(json, ContentType.APPLICATION_JSON);

// 将请求实体设置到httpPost对象中

httpPost.setEntity(stringEntity);

}

CloseableHttpResponse response = null;

try {

// 执行请求

response = this.httpClient.execute(httpPost);

return new HttpResult(response.getStatusLine().getStatusCode(),

EntityUtils.toString(response.getEntity(), "UTF-8"));

} finally {

if (response != null) {

response.close();

}

}

}

}

http执行post请求返回的封装类:

public class HttpResult {

private Integer code;

private String data;

public HttpResult(Integer code, String data) {

this.code = code;

this.data = data;

}

public HttpResult() {

}

public Integer getCode() {

return code;

}

public void setCode(Integer code) {

this.code = code;

}

public String getData() {

return data;

}

public void setData(String data) {

this.data = data;

}

}

转载地址:http://jerdy.baihongyu.com/

你可能感兴趣的文章
dell r340安装window和linux
查看>>
OGG-14036 Schema is required for heartbeattable : gg_heartbeat.
查看>>
OGG-05673 CSN-based duplicate suppression is disabled because there is no checkpoint table for this
查看>>
19c多租户ogg微服务命令行查看参考
查看>>
【Python】【Python语言】Python3.7.2的关键字与保留字
查看>>
拆解老古董:一台60年代的双矿石收音机
查看>>
美敦力公开呼吸机,开发环境为Keil + ST10F276(STM32前身)
查看>>
TIOBE 4 月榜单 C 和 JAVA 几乎持平
查看>>
讲真,WiFi 6到底6在哪儿
查看>>
简单上手GDB调试
查看>>
ARMv8-M相比ARMv7-M架构优势在哪里?
查看>>
PCB差分信号设计中的3个常见误区
查看>>
精选汇总 | 嵌入式软硬件综合内容
查看>>
精选汇总 | 软件工具、 编译器、 编辑器
查看>>
全面解读操作系统中的内存管理,你懂几点?
查看>>
上世纪多个奇葩发明与设计
查看>>
同步整流和非同步整流有什么区别?
查看>>
PCB上10A的电流需要走多宽的线?需要几个过孔?
查看>>
波士顿动力又被低价卖出,背后有哪些不为人知的故事
查看>>
两个线程,两个互斥锁,怎么形成一个死循环?
查看>>