httpsClientUtil傳送請求和接受請求方法
阿新 • • 發佈:2020-10-22
package com.util; import org.apache.http.HttpHost; 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.client.protocol.HttpClientContext; 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.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.protocol.HTTP; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; public class HttpsClientUtil { private static HttpClientContext context = HttpClientContext.create(); //如果訪問不了請使用代理,免費代理伺服器地址查詢:http://31f.cn/ private static HttpHost proxy = new HttpHost("127.0.0.1", 63129, "http"); //ConnectionRequestTimeout,從連線池中獲取可用連線超時 //ConnectTimeout,連線目標超時 //SocketTimeout,等待響應超時(讀取資料超時) private static RequestConfig requestConfig = RequestConfig.custom() .setProxy(proxy) .setConnectTimeout(120000) .setSocketTimeout(60000) .setConnectionRequestTimeout(60000).build(); //https private static SSLConnectionSocketFactory socketFactory; private static TrustManager manager = new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return null; } }; private static PoolingHttpClientConnectionManager connectionManager; static { try { SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[]{manager}, null); socketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE); Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() .register("http", PlainConnectionSocketFactory.INSTANCE) .register("https", socketFactory).build(); connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } } public static CloseableHttpResponse doJsonPost(String url, String json) { CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(connectionManager) .setDefaultRequestConfig(requestConfig).build(); HttpPost httpPost = new HttpPost(url); //解決中文亂碼問題 StringEntity entity = new StringEntity(json, "utf-8"); httpPost.setEntity(entity); httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json"); httpPost.addHeader("charset", "utf-8"); CloseableHttpResponse response = null; try { response = httpClient.execute(httpPost, context); } catch (Exception e) { e.printStackTrace(); } return response; } }