package com.stylefeng.guns.modular.system.util;
|
|
import com.alibaba.fastjson.JSON;
|
import org.apache.http.NameValuePair;
|
import org.apache.http.client.config.RequestConfig;
|
import org.apache.http.client.entity.UrlEncodedFormEntity;
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
import org.apache.http.client.methods.HttpGet;
|
import org.apache.http.client.methods.HttpPost;
|
import org.apache.http.entity.ContentType;
|
import org.apache.http.entity.EntityTemplate;
|
import org.apache.http.entity.StringEntity;
|
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;
|
import org.springframework.stereotype.Component;
|
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Set;
|
|
/**
|
* http工具类
|
*/
|
@Component
|
public class HttpClientUtil {
|
|
private CloseableHttpClient httpClient;
|
|
private CloseableHttpResponse httpResponse;
|
|
private RequestConfig requestConfig;
|
|
|
/**
|
* 创建一个httpClient对象
|
*/
|
private void getHttpCline(){
|
this.httpClient = HttpClients.createDefault();
|
}
|
|
private void setRequestConfig(){
|
|
}
|
|
|
|
/**
|
* 创建一个POST请求实例
|
* @param url 请求地址
|
* @param params 请求参数
|
*/
|
private void setPostHttpRequset(String url, Map<String, Object> params, Map<String, String> header, String contentType){
|
HttpPost httpPost = new HttpPost(url);
|
if(null != header){
|
for(String key : header.keySet()){
|
httpPost.setHeader(key, header.get(key));
|
}
|
}
|
List<NameValuePair> list = new ArrayList<>();
|
if(null != params){
|
Set<String> keys = params.keySet();
|
for(String key : keys){
|
list.add(new BasicNameValuePair(key, params.get(key).toString()));
|
}
|
}
|
try {
|
switch (contentType){
|
case "form":
|
httpPost.setEntity(new UrlEncodedFormEntity(list));
|
break;
|
case "json":
|
String s = JSON.toJSONString(params);
|
System.err.println(s);
|
httpPost.setEntity(new StringEntity(s, ContentType.APPLICATION_JSON));
|
break;
|
}
|
this.getHttpCline();
|
httpResponse = this.httpClient.execute(httpPost);
|
} catch (IOException e) {
|
e.printStackTrace();
|
this.close();
|
}
|
}
|
|
|
/**
|
* 获取get请求实例
|
* @param url 请求地址
|
* @param params 请求参数
|
*/
|
private void setGetHttpRequset(String url, Map<String, Object> params, Map<String, String> header){
|
StringBuffer sb = new StringBuffer();
|
String p = "";
|
if(null != params){
|
Set<String> keys = params.keySet();
|
for(String key : keys){
|
sb.append(key + "=" + params.get(key) + "&");
|
}
|
p = "?" + sb.substring(0, sb.length() - 1);
|
}
|
HttpGet httpGet = new HttpGet(url + p);
|
if(null != header){
|
for(String key : header.keySet()){
|
httpGet.setHeader(key, header.get(key));
|
}
|
}
|
this.getHttpCline();
|
try {
|
httpResponse = this.httpClient.execute(httpGet);
|
} catch (IOException e) {
|
e.printStackTrace();
|
this.close();
|
}
|
}
|
|
|
/**
|
* 发送http请求
|
* @param mothed "GET、POST、PUT、HEAD、DELETE、HEAD、OPTIONS"
|
* @param url 请求地址
|
* @param params 请求参数
|
* @param header 请求头
|
* @param contentType 参数请求方式form/json
|
* @return
|
*/
|
public String pushHttpRequset(String mothed, String url, Map<String, Object> params, Map<String, String> header, String contentType){
|
String content = null;
|
switch (mothed){
|
case "GET":
|
this.setGetHttpRequset(url, params, header);
|
break;
|
case "POST":
|
this.setPostHttpRequset(url, params, header, contentType);
|
break;
|
}
|
if(httpResponse.getStatusLine().getStatusCode() == 200){
|
try {
|
content = EntityUtils.toString(httpResponse.getEntity());
|
} catch (IOException e) {
|
e.printStackTrace();
|
this.close();
|
}
|
}else{
|
try {
|
content = "返回状态码:" + httpResponse.getStatusLine() + "。" + EntityUtils.toString(httpResponse.getEntity());
|
} catch (IOException e) {
|
e.printStackTrace();
|
this.close();
|
}
|
}
|
this.close();
|
return content;
|
}
|
|
|
/**
|
* 发送XML请求
|
* @param url 请求地址
|
* @param xml XML数据
|
* @param header 自定义请求头
|
* @return
|
*/
|
public String pushHttpRequsetXml(String url, String xml, Map<String, String> header){
|
HttpPost httpPost = new HttpPost(url);
|
for(String key : header.keySet()){
|
httpPost.setHeader(key, header.get(key));
|
}
|
httpPost.setHeader("Content-Type", "application/xml");
|
try {
|
httpPost.setEntity(new StringEntity(xml, "UTF-8"));
|
this.getHttpCline();
|
httpResponse = this.httpClient.execute(httpPost);
|
String content = null;
|
if(httpResponse.getStatusLine().getStatusCode() == 200){
|
try {
|
content = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
|
} catch (IOException e) {
|
e.printStackTrace();
|
this.close();
|
}
|
}else{
|
try {
|
content = "返回状态码:" + httpResponse.getStatusLine() + "。" + EntityUtils.toString(httpResponse.getEntity());
|
} catch (IOException e) {
|
e.printStackTrace();
|
this.close();
|
}
|
}
|
this.close();
|
return content;
|
} catch (IOException e) {
|
e.printStackTrace();
|
this.close();
|
}
|
return null;
|
}
|
|
|
|
/**
|
* 关闭资源
|
*/
|
private void close(){
|
try {
|
httpClient.close();
|
httpResponse.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}finally {
|
try {
|
if(null != httpClient){
|
httpClient.close();
|
}
|
if(null != httpResponse){
|
httpResponse.close();
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
}
|
}
|
}
|