package com.stylefeng.guns.modular.system.util.zhenglian;
|
|
import org.apache.http.client.config.AuthSchemes;
|
import org.apache.http.client.config.CookieSpecs;
|
import org.apache.http.client.config.RequestConfig;
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
import org.apache.http.client.methods.HttpPost;
|
import org.apache.http.config.Registry;
|
import org.apache.http.config.RegistryBuilder;
|
import org.apache.http.conn.socket.ConnectionSocketFactory;
|
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
|
import org.apache.http.conn.ssl.NoopHostnameVerifier;
|
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
import org.apache.http.entity.ContentType;
|
import org.apache.http.entity.StringEntity;
|
import org.apache.http.impl.client.CloseableHttpClient;
|
import org.apache.http.impl.client.HttpClients;
|
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
import org.apache.http.util.EntityUtils;
|
|
import javax.net.ssl.SSLContext;
|
import javax.net.ssl.TrustManager;
|
import javax.net.ssl.X509TrustManager;
|
import java.io.IOException;
|
import java.security.KeyManagementException;
|
import java.security.NoSuchAlgorithmException;
|
import java.security.cert.X509Certificate;
|
import java.util.Arrays;
|
import java.util.Iterator;
|
import java.util.Map;
|
import java.util.Set;
|
|
/**
|
* @author zhibing.pu
|
* @Date 2025/7/28 14:23
|
*/
|
public class ZLHttpClientUtil {
|
|
/**
|
* 连接超时时间
|
*/
|
private final static int CONNECT_TIMEOUT = 30000;
|
/**
|
* 请求超时时间
|
*/
|
private final static int REQUEST_TIMEOUT = 50000;
|
/**
|
* socket超时时间
|
*/
|
private final static int SOCKET_TIMEOUT = 50000;
|
/**
|
* 请求格式
|
*/
|
private final static String FORMAT = "application/json";
|
/**
|
* 请求类型
|
*/
|
private final static String POST_TYPE = "https://";
|
|
public static String doPost(String url, Map<String, String> headerMap, String jsonData) {
|
CloseableHttpClient httpClient = HttpClients.createDefault();
|
if (url != null && url.startsWith(POST_TYPE)) {
|
httpClient = sslClient();
|
}
|
HttpPost httpPost = new HttpPost(url);
|
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT)
|
.setConnectionRequestTimeout(REQUEST_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).setRedirectsEnabled(true)
|
.build();
|
httpPost.setConfig(requestConfig);
|
httpPost.setHeader("Content-Type", "application/json");
|
if (headerMap != null) {
|
Set<String> keys = headerMap.keySet();
|
for (Iterator<String> i = keys.iterator(); i.hasNext();) {
|
String key = (String) i.next();
|
httpPost.addHeader(key, headerMap.get(key));
|
}
|
}
|
try {
|
httpPost.setEntity(new StringEntity(jsonData, ContentType.create(FORMAT, "UTF-8")));
|
CloseableHttpResponse execute = httpClient.execute(httpPost);
|
int statusCode = execute.getStatusLine().getStatusCode();
|
if (statusCode == 200) {
|
return String.valueOf(EntityUtils.toString(execute.getEntity()));
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
if (null != httpClient) {
|
try {
|
httpClient.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
return null;
|
}
|
|
private static CloseableHttpClient sslClient() {
|
try {
|
X509TrustManager trustManager = new X509TrustManager() {
|
@Override public X509Certificate[] getAcceptedIssuers() {
|
return null;
|
}
|
@Override public void checkClientTrusted(X509Certificate[] xcs, String str) {}
|
@Override public void checkServerTrusted(X509Certificate[] xcs, String str) {}
|
};
|
SSLContext ctx = SSLContext.getInstance(SSLConnectionSocketFactory.TLS);
|
ctx.init(null, new TrustManager[] { trustManager }, null);
|
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(ctx, NoopHostnameVerifier.INSTANCE);
|
// 创建Registry
|
RequestConfig requestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD_STRICT)
|
.setExpectContinueEnabled(Boolean.TRUE).setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM,AuthSchemes.DIGEST))
|
.setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC)).build();
|
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
|
.register("http", PlainConnectionSocketFactory.INSTANCE)
|
.register("https",socketFactory).build();
|
// 创建ConnectionManager,添加Connection配置信息
|
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
|
CloseableHttpClient closeableHttpClient = HttpClients.custom().setConnectionManager(connectionManager)
|
.setDefaultRequestConfig(requestConfig).build();
|
return closeableHttpClient;
|
} catch (KeyManagementException ex) {
|
throw new RuntimeException(ex);
|
} catch (NoSuchAlgorithmException ex) {
|
throw new RuntimeException(ex);
|
}
|
}
|
}
|