一、配置檔案的編輯寫
<?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);
}
}