package com.test.mingjing.common;
import com.alibaba.fastjson.JSONObject;
import com.helijia.merchant.modules.item.vo.ApplyArtworkGroup;
import com.helijia.merchant.modules.item.web.ItemController;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.http.Consts;
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.HttpPost;
import org.apache.http.config.ConnectionConfig;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.CodingErrorAction;
import java.util.*;
/**
* @ClasName HttpUtil
* @description HTTP请求接口
* @Author: Allen
* @Create: 2019-03-21 16:07
*/
public class HttpUtil {
private final static Logger logger = LoggerFactory.getLogger(HttpUtil.class);
private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36";
// 超时设置
private static final RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(5000)
.setConnectionRequestTimeout(5000)
.setSocketTimeout(10000)
.build();
// 编码设置
private static final ConnectionConfig connectionConfig = ConnectionConfig.custom()
.setMalformedInputAction(CodingErrorAction.IGNORE)
.setUnmappableInputAction(CodingErrorAction.IGNORE)
.setCharset(Consts.UTF_8)
.build();
private static HttpClientBuilder getBuilder() {
List<Header> headers = new ArrayList<>();
Header header = new BasicHeader("User-Agent", USER_AGENT);
headers.add(header);
return HttpClients.custom().setDefaultConnectionConfig(connectionConfig).setDefaultHeaders(headers).setDefaultRequestConfig(requestConfig);
}
/**
* @return java.lang.String
* @Description GET请求
* @Author Allen
* @Date 2019-03-21 17:34
* @Param [url]
*/
public static String sendGet(String url) {
String result = "";
HttpGet httpGet = new HttpGet(url);
try (CloseableHttpClient httpclient = getBuilder().build();
CloseableHttpResponse response = httpclient.execute(httpGet)) {
HttpEntity httpEntity = response.getEntity();
result = EntityUtils.toString(httpEntity);
} catch (IOException e) {
logger.info(String.format("sendGet error %s", e.getMessage()));
}
return result;
}
/**
* @Description 初始化HttpPost,主要是编码格式
* @Author Allen
* @Date 2019-03-21 17:41
* @Param [url, stringEntity]
* @return org.apache.http.client.methods.HttpPost
*/
private static void initHttpPost(HttpPost post, StringEntity stringEntity){
stringEntity.setContentType("application/json");
stringEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
post.addHeader("Content-Type", "application/json;charset=utf-8");
post.setHeader("Accept", "application/json");
post.setEntity(stringEntity);
}
/**
* @Description 获取HttpPost
* @Author Allen
* @Date 2019-03-21 17:52
* @Param [url, stringEntity]
* @return org.apache.http.client.methods.HttpPost
*/
private static HttpPost getHttpPost(String url, StringEntity stringEntity){
HttpPost httpPost = new HttpPost(url);
initHttpPost(httpPost, stringEntity);
return httpPost;
}
/**
* @Description 获取HttpPost
* @Author Allen
* @Date 2019-03-21 17:56
* @Param [url, paramJsonStr:参数数据json格式]
* @return org.apache.http.client.methods.HttpPost
*/
private static HttpPost getHttpPost(String url, String paramJsonStr){
StringEntity stringEntity = new StringEntity(paramJsonStr, Charset.forName("UTF-8"));
HttpPost httpPost = new HttpPost(url);
initHttpPost(httpPost, stringEntity);
return httpPost;
}
/**
* @Description 发送HttpPost请求,参数为json字符串
* @Author Allen
* @Date 2019-03-21 17:35
* @Param [url, jsonStr]
* @return java.lang.String
*/
public static String sendPost(String url, String paramJsonStr){
String result = httpExecute(getHttpPost(url, paramJsonStr));
return result;
}
/**
* @Description 发送HttpPost请求,参数为json字符串,设置Header体
* @Author Allen
* @Date 2019-03-21 17:35
* @Param [url, jsonStr, headers]
* @return java.lang.String
*/
public static String sendPost(String url, String jsonStr, Map<String, String> headers){
// 设置entity
logger.info(String.format("请求地址:%s ",url));
logger.info(String.format("请求参数:%s ",jsonStr));
StringEntity stringEntity = new StringEntity(jsonStr, Charset.forName("UTF-8"));
HttpPost httpPost = getHttpPost(url, stringEntity);
if (headers != null && !headers.isEmpty()) {
Set<String> keys = headers.keySet();
for (Iterator<String> i = keys.iterator(); i.hasNext();) {
String key = (String) i.next();
httpPost.addHeader(key, headers.get(key));
}
}
String result = httpExecute(httpPost);
logger.info(String.format("请求结果:%s",result));
return result;
}
/**
* 发送HttpPost请求,提交表单,支持文件上传
*
* @param url 请求地址
* @param params 表单参数
* @return
*/
public static String sendPost(String url, Map<String, String> params, Map<String, String> headers){
// 设置entity
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setCharset(Charset.forName("UTF-8"));
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
if (MapUtils.isNotEmpty(params)) { // 普通表单参数
for (String key : params.keySet()) {
StringBody stringBody = new StringBody(params.get(key), ContentType.create("text/plain", "UTF-8"));
builder.addPart(key, stringBody);
}
}
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(builder.build());
httpPost.setHeader("Content-Type", "application/json");
if (!headers.isEmpty()) {
Set<String> keys = headers.keySet();
for (Iterator<String> i = keys.iterator(); i.hasNext(); ) {
String key = (String) i.next();
httpPost.addHeader(key, headers.get(key));
}
}
String result = httpExecute(httpPost);
return result;
}
private static String httpExecute(HttpPost httpPost) {
String result = "";
try (CloseableHttpClient httpclient = getBuilder().build();
CloseableHttpResponse httpResponse = httpclient.execute(httpPost)) {
HttpEntity httpEntity = httpResponse.getEntity();
result = EntityUtils.toString(httpEntity);
} catch (IOException e) {
logger.debug(String.format("---------ERROR ! message:%s",e.getMessage()));
}
return result;
}
}
Http请求工具类HttpUtil
最新推荐文章于 2024-05-03 12:01:06 发布