本文共 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/