一、配置文件的编辑写
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd">
<context:component-scan base-package="com.brillilab.httpclient"/>
<context:property-placeholder location="classpath:properties/httpclient.properties"/>
<!-- 连接管理器 -->
<bean id="httpClientConnectionManager" class="org.apache.http.impl.conn.PoolingHttpClientConnectionManager">
<property name="defaultMaxPerRoute" value="${http.defaultMaxPerRoute}"/>
<property name="maxTotal" value="${http.maxTotal}"/>
</bean>
<!-- HttpClientBuilder HttpClient构建器 -->
<bean id="httpClientBuilder" class="org.apache.http.impl.client.HttpClientBuilder">
<property name="connectionManager" ref="httpClientConnectionManager"/>
</bean>
<!-- HttpClient对象 由HttpClientBuilder生产 -->
<bean id="httpClient" class="org.apache.http.impl.client.CloseableHttpClient" factory-bean="httpClientBuilder" factory-method="build" scope="prototype"/>
<!-- RequestConfig.Builder RequestConfig构建器 -->
<bean id="requestConfigBuilder" class="org.apache.http.client.config.RequestConfig.Builder">
<property name="connectTimeout" value="${http.connectTimeout}"/>
<property name="connectionRequestTimeout" value="${http.connectionRequestTimeout}"/>
<property name="socketTimeout" value="${http.socketTimeout}"/>
<property name="staleConnectionCheckEnabled" value="${http.staleConnectionCheckEnabled}"/>
</bean>
<!-- RequestConfig对象 -->
<bean id="requestConfig" class="org.apache.http.client.config.RequestConfig" factory-bean="requestConfigBuilder" factory-method="build"/>
</beans>
二、工具类的编写
(一)HttpClientUtils
package com.brillilab.httpclient;
import org.apache.http.HttpEntity;
import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.entity.SerializableEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.io.Serializable;
import java.util.Map;
/**
* HttpClient工具类
*
* @author wmh
*/
@Component
public class HttpClientUtils {
private static final String UTF8="utf-8";
private static CloseableHttpClient httpClient;
private static RequestConfig requestConfig;
public static String sendHttp(HttpRequestMethodEnum requestMethod, String url, Map<String,Serializable> params, Map<String,String> header){
HttpRequestBase request = requestMethod.createRequest(url);
request.setConfig(requestConfig);
CloseableHttpResponse httpResponse = null;
String responseContent = null;
//添加请求头
if (header!=null){
for (Map.Entry<String,String> entry:header.entrySet()){
request.setHeader(entry.getKey(),entry.getValue());
}
}
//添加请求参数
try {
if (params!=null){
for (Map.Entry<String,Serializable> entry:params.entrySet()){
((HttpEntityEnclosingRequest)request).setEntity(new SerializableEntity(entry.getValue(),true));
}
}
//执行HTTP请求
httpResponse=httpClient.execute(request);
//获取响应对象实体
HttpEntity entity = httpResponse.getEntity();
//从响应对实体中获取响应的内容
if (entity!=null){
responseContent=EntityUtils.toString(entity,UTF8);
}
}catch (IOException e){
e.printStackTrace();;
}finally {
try {
//关闭响应对象;
if (httpResponse != null) {
httpResponse.close();
}
//关闭HttpClient.
if (httpClient != null) {
httpClient.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return responseContent;
}
@Resource(name = "httpClient")
public void setHttpClient(CloseableHttpClient httpClient) {
this.httpClient = httpClient;
}
@Resource(name = "requestConfig")
public void setRequestConfig(RequestConfig requestConfig) {
this.requestConfig = requestConfig;
}
}
(二)HttpRequestMethodEnum
package com.brillilab.httpclient;
import org.apache.http.client.methods.*;
/**
* HttpRequestMethodEnum
*
* @author wmh
*/
public enum HttpRequestMethodEnum {
//HttpGet
HttpGet{
@Override
public HttpRequestBase createRequest(String url) {
return new HttpGet(url);
}
},
//HttpPost
HttpPost{
@Override
public HttpRequestBase createRequest(String url) {
return new HttpPost(url);
}
},
//HttpPut
HttpPut{
@Override
public HttpRequestBase createRequest(String url) {
return new HttpPut(url);
}
},
//HttpDelete
HttpDelete{
@Override
public HttpRequestBase createRequest(String url) {
return new HttpDelete(url);
}
}
;
public abstract HttpRequestBase createRequest(String url);
}
(三)测试
package com.brillilab.test;
import com.brillilab.httpclient.HttpClientUtils;
import com.brillilab.httpclient.HttpRequestMethodEnum;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.io.IOException;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/httpclient.xml"})
public class HttpClientTest {
private final String UTF8="utf-8";
@Autowired
CloseableHttpClient httpClient;
@Autowired
RequestConfig requestConfig;
/**
* HttpClient基本使用测试
*/
@Test
public void test01(){
String url="http://localhost:8080/index";
//创建http GET请求
HttpRequestBase request = new HttpGet(url);
//向请求添加config
request.setConfig(requestConfig);
CloseableHttpResponse response=null;
try {
//使用HttpClient发起请求得到响应
response= httpClient.execute(request);
//获得响应实体
HttpEntity entity = response.getEntity();
Header[] headers = response.getAllHeaders();
//将响应实体转换为字符串
String responseContext = EntityUtils.toString(entity,UTF8);
for (Header header:headers){
System.out.println("name: "+header.getName()+" value: "+header.getValue());
}
System.out.println(responseContext);
} catch (IOException e) {
e.printStackTrace();
}finally {
//关闭资源
try {
if (httpClient!=null){
httpClient.close();
}
if (response!=null){
response.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
/**
* HttpClientUtils测试
*/
@Test
public void test02(){
String url="http://localhost:8080/index";
String result = HttpClientUtils.sendHttp(HttpRequestMethodEnum.HttpGet, url, null, null);
System.out.println(result);
}
}