您现在的位置是:首页 > 技术人生 > 后端技术后端技术
httpclient封装HttpUtils
高晓波2021-11-10【后端技术】人已围观
简介开发过程中经常会调用第三方接口,封装httptutils工具方便使用
http统一返回值HttpResult对象:
import lombok.Data;
import org.apache.http.Header;
/**
* @author gaoxiaobo
* @description
* @date 2021/10/28 3:46 下午
*/
@Data
public class HttpResult {
private int statusCode;
private Header[] requestHeaders;
private Header[] responseHeaders;
private String body;
}
HttpUtils封装:
import com.alibaba.fastjson.JSON;
import org.apache.http.*;
import org.apache.http.client.HttpClient;
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.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
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.BasicNameValuePair;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.TrustStrategy;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.net.ssl.SSLContext;
import java.nio.charset.StandardCharsets;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.*;
/**
* @author gaoxiaobo
* @description
* @date 2021/9/26 11:17 上午
*/
public class HttpUtils {
private final static Logger logger = LoggerFactory.getLogger(HttpUtils.class);
private final static String USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36";
public static CloseableHttpClient createSSLClientDefault() {
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
//信任所有
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
return true;
}
}).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
} catch (KeyManagementException e) {
logger.error("错误信息:", e);
} catch (NoSuchAlgorithmException e) {
logger.error("错误信息:", e);
} catch (KeyStoreException e) {
logger.error("错误信息:", e);
}
return HttpClients.createDefault();
}
private static RequestConfig requestConfig;
static {
requestConfig = RequestConfig.custom()
.setSocketTimeout(30000)
.setRedirectsEnabled(true)
.setConnectTimeout(30000)
.build();
}
public static HttpResult get(String url, Map<String, String> headers, Map<String, Object> params) throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
HttpResult result = new HttpResult();
HttpGet get = null;
if (params != null && !params.isEmpty()) {
List<NameValuePair> paramList = new ArrayList<NameValuePair>();
// 遍历map,设置参数到list中
for (Map.Entry<String, Object> entry : params.entrySet()) {
paramList.add(new BasicNameValuePair(entry.getKey(), entry.getValue() == null ? "" : entry.getValue().toString()));
}
String paramsStr = EntityUtils.toString(new UrlEncodedFormEntity(paramList, Consts.UTF_8));
get = new HttpGet(url + "?" + paramsStr);
} else {
get = new HttpGet(url);
}
get.addHeader("user-agent", USER_AGENT);
if (headers != null && !headers.isEmpty()) {
Set<String> keys = headers.keySet();
for (String key : keys) {
get.addHeader(key, headers.get(key));
}
}
result.setRequestHeaders(get.getAllHeaders());
HttpResponse response = client.execute(get);
result.setResponseHeaders(response.getAllHeaders());
result.setStatusCode(response.getStatusLine().getStatusCode());
//5、获取实体
HttpEntity entity = response.getEntity();
String s = EntityUtils.toString(entity, "UTF-8");
result.setBody(s);
//将实体装成字符串
return result;
}
public static HttpResult get(String url, Map<String, String> headers) throws Exception {
return get(url, headers, null);
}
public static HttpResult get(String url, Object params) throws Exception {
Map<String, Object> filedsInfo = ReflectUtils.getFiledsInfo(params);
return get(url, null, filedsInfo);
}
public static HttpResult get(String url) throws Exception {
return get(url, null, null);
}
public static HttpResult postFormData(String url, Map<String, Object> params, Map<String, String> headers, String encode) throws Exception {
HttpResult result = new HttpResult();
if (encode == null) {
encode = "utf-8";
}
CloseableHttpClient closeableHttpClient = createSSLClientDefault();
HttpPost httpost = new HttpPost(url);
httpost.setConfig(requestConfig);
//设置header
if (headers != null && headers.size() > 0) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
httpost.setHeader(entry.getKey(), entry.getValue());
}
}
result.setRequestHeaders(httpost.getAllHeaders());
//组织请求参数
List<NameValuePair> paramList = new ArrayList<NameValuePair>();
if (params != null && params.size() > 0) {
Set<String> keySet = params.keySet();
for (String key : keySet) {
paramList.add(new BasicNameValuePair(key, params.get(key) == null ? "" : params.get(key).toString()));
}
}
httpost.setEntity(new UrlEncodedFormEntity(paramList, encode));
CloseableHttpResponse response = closeableHttpClient.execute(httpost);
result.setResponseHeaders(response.getAllHeaders());
result.setStatusCode(response.getStatusLine().getStatusCode());
HttpEntity entity = response.getEntity();
String s = EntityUtils.toString(entity, encode);
result.setBody(s);
return result;
}
public static HttpResult postFormData(String url, Map<String, Object> params, Map<String, String> headers) throws Exception{
return postFormData(url, params, headers, null);
}
public static HttpResult postFormData(String url, Object params, Map<String, String> headers) throws Exception{
Map<String, Object> filedsInfo = ReflectUtils.getFiledsInfo(params);
return postFormData(url, filedsInfo, headers, null);
}
public static HttpResult postFormData(String url, Object params) throws Exception{
return postFormData(url, params, null);
}
public static HttpResult postFormData(String url, Map<String, Object> params) throws Exception{
return postFormData(url, params, null, null);
}
public static HttpResult postFormData(String url) throws Exception{
return postFormData(url, null, null, null);
}
/**
* POST application/json
* @param url
* @param params
* @param headers
* @return
* @throws Exception
*/
public static HttpResult postJson(String url, Object params, Map<String, String> headers) throws Exception {
HttpClient client = HttpClients.createDefault();
HttpResult result = new HttpResult();
HttpPost post = new HttpPost(url);
post.setConfig(requestConfig);
// 构建消息实体
StringEntity requestEntity = new StringEntity(JSON.toJSONString(params), StandardCharsets.UTF_8);
requestEntity.setContentEncoding("UTF-8");
// 发送Json格式的数据请求
requestEntity.setContentType("application/json");
//设置header
if (headers != null && headers.size() > 0) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
post.setHeader(entry.getKey(), entry.getValue());
}
}
result.setRequestHeaders(post.getAllHeaders());
post.setEntity(requestEntity);
HttpResponse response = client.execute(post);
result.setResponseHeaders(response.getAllHeaders());
result.setStatusCode(response.getStatusLine().getStatusCode());
HttpEntity responseEntity = response.getEntity();
String resultStr = EntityUtils.toString(responseEntity, "UTF-8");
result.setBody(resultStr);
return result;
}
public static HttpResult postJson(String url, Object params) throws Exception {
return postJson(url, params, null);
}
public static HttpResult postUrlencodedJson(String url, Object params, Map<String, String> headers) throws Exception {
Map<String, Object> filedsInfo = ReflectUtils.getFiledsInfo(params);
return postUrlencodedJson(url, filedsInfo, headers);
}
public static HttpResult postUrlencodedJson(String url, Object params) throws Exception {
Map<String, Object> filedsInfo = ReflectUtils.getFiledsInfo(params);
return postUrlencodedJson(url, filedsInfo, null);
}
/**
* POST application/x-www-form-urlencoded
* @param url
* @param params
* @param headers
* @return
* @throws Exception
*/
public static HttpResult postUrlencodedJson(String url, Map<String, Object> params, Map<String, String> headers) throws Exception {
CloseableHttpResponse response = null;
CloseableHttpClient httpclient = HttpClientBuilder
.create()
.build();
// 创建httppost
HttpPost httpPost = new HttpPost(url);
httpPost.setConfig(requestConfig);
HttpResult result = new HttpResult();
//设置header
if (headers != null && headers.size() > 0) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
httpPost.setHeader(entry.getKey(), entry.getValue());
}
}
// 设置提交方式
httpPost.addHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
// 添加参数
List<NameValuePair> nameValuePairs = new ArrayList<>();
if (params.size() != 0) {
// 将mapdata中的key存在set集合中,通过迭代器取出所有的key,再获取每一个键对应的值
Set<String> keySet = params.keySet();
for (String key : keySet) {
String v = params.get(key) == null ? "" : params.get(key).toString();// value
nameValuePairs.add(new BasicNameValuePair(key, v));
}
}
UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairs, "UTF-8");
httpPost.setEntity(urlEncodedFormEntity);
result.setRequestHeaders(httpPost.getAllHeaders());
// 执行http请求
response = httpclient.execute(httpPost);
result.setResponseHeaders(response.getAllHeaders());
result.setStatusCode(response.getStatusLine().getStatusCode());
// 获得http响应体
HttpEntity entity = response.getEntity();
String s = EntityUtils.toString(entity, "UTF-8");
result.setBody(s);
return result;
}
}
Tags:
很赞哦! ()
相关文章
随机图文
-
SpringBoot排除自动配置
SpringBoot的自动配置给我们开发带来了极大的便利,但有些时候也带来了一些问题。 问题场景: 该项目是基于Springboot + dubbo的微服务架构,框架结构web + facade + service,某 -
maven安装jar到本地仓库
JAVA做淘宝客程序开发的时候,我用的是maven管理依赖jar包。 如何将阿里妈妈下载的jar包以及source jar安装到maven本地仓库呢? -
mybatis plus生成实体entity没有id
总是写很多重复的增删改查毫无意义,浪费生命,于是乎准备弄一个增删改查代码生成工具。网上查了一下mybatis plus挺好的,于是乎打开官网 Quick Start!按照官网的演示栗子:// 演示 -
Springboot集成quartz定时任务可视化配置
使用quartz定时任务已经有一段时间了,今天记录一下Springboot 2.x集成Quartz。