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 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 keys = headerMap.keySet(); for (Iterator 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 socketFactoryRegistry = RegistryBuilder.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); } } }