| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 |
- package com.ruoyi.bestsign.utils;
-
- 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.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.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.util.EntityUtils;
-
- import javax.net.ssl.SSLContext;
- import javax.net.ssl.TrustManager;
- import javax.net.ssl.X509TrustManager;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.UnsupportedEncodingException;
- import java.net.MalformedURLException;
- import java.net.URL;
- import java.net.URLEncoder;
- import java.security.cert.CertificateException;
- import java.security.cert.X509Certificate;
- import java.util.HashMap;
- import java.util.Map;
-
- public class HttpClientSender {
-
- private static PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = null;
- private static Map<String, CloseableHttpClient> httpClients = new HashMap<String, CloseableHttpClient>();
-
- private static Object o = new Object();
-
- public static String sendHttpPost(String host, String method, String urlParams, String sendData) throws IOException {
-
- String requestUrl = host + method + urlParams;
-
- Map<String, Object> response = request("POST", requestUrl, sendData, null);
- int responseCode = Integer.parseInt(response.get("responseCode").toString());
- byte[] responseBytes = (byte[]) response.get("responseData");
- String responseString;
- try {
- responseString = new String(responseBytes, "UTF-8");
- } catch (UnsupportedEncodingException e) {
- responseString = new String(responseBytes);
- }
- //请求返回结果无论成功失败,http-status均为200
- if (responseCode == 200) {
- //返回结果
- return responseString;
- } else {
- throw new IOException(responseCode + ":" + responseString);
- }
- }
-
- public static byte[] sendHttpGet(String host, String method, String urlParams) throws IOException {
- String requestUrl = host + method + urlParams;
- Map<String, Object> response = request("GET", requestUrl, null, null);
- int responseCode = Integer.parseInt(response.get("responseCode").toString());
- byte[] responseBytes = (byte[]) response.get("responseData");
- //请求返回结果无论成功失败,http-status均为200
- if (responseCode == 200) {
- //返回结果
- return responseBytes;
- } else {
- throw new IOException(responseCode + "");
- }
- }
-
- public static String urlencode(String data) {
- return urlencode(data, "UTF-8");
- }
-
- public static String urlencode(String data, String charset) {
- try {
- return URLEncoder.encode(data, charset);
- } catch (UnsupportedEncodingException e) {
- throw new RuntimeException(e.getMessage(), e);
- }
- }
-
- public static Map<String, Object> request(String method, String url, Object sendData, Map<String, String> headers) throws IOException {
-
-
- String requestPath;
- try {
- requestPath = new URL(url).getPath();
- } catch (MalformedURLException e) {
- throw new RuntimeException(e.getMessage(), e);
- }
- CloseableHttpClient httpClient = getHttpClient(requestPath);
-
- Map<String, Object> response = null;
- if ("POST".equals(method)) {
- response = sendPost(httpClient, url, headers, sendData);
- } else {
- response = sendGet(httpClient, url, headers);
- }
- return response;
- }
-
- private static Map<String, Object> sendPost(CloseableHttpClient httpClient, String url, Map<String, String> headers, Object sendData) throws IOException {
- String tag = "[HttpRequester] [POST " + url + "]";
- int responseCode = -1;
- byte[] responseBytes = null;
-
- HttpPost request = new HttpPost(url);
- if (headers != null && headers.size() > 0) {
- for (String name : headers.keySet()) {
- String value = headers.get(name);
- request.setHeader(name, value);
- }
- }
- if (sendData != null) {
- StringEntity stringEntity = new StringEntity((String) sendData, "UTF-8");
- stringEntity.setContentType("application/json");
- request.setEntity(stringEntity);
-
- HttpEntity httpEntity = null;
- IOException exception = null;
- for (int i = 0; i < 3; i++) {
- try {
- CloseableHttpResponse response = httpClient.execute(request);
- responseCode = response.getStatusLine().getStatusCode();
- httpEntity = response.getEntity();
-
- String responseBody = EntityUtils.toString(httpEntity, "utf-8");
- if (responseBody != null) {
- responseBytes = responseBody.getBytes();
- } else {
- InputStream respStream = null;
- try {
- respStream = httpEntity.getContent();
- int respBodySize = respStream.available();
- if (respBodySize <= 0)
- throw new IOException("Invalid respBodySize: " + respBodySize);
- responseBytes = new byte[respBodySize];
- if (respStream.read(responseBytes) != respBodySize)
- throw new IOException("Read respBody Error");
- } catch (Exception e) {
- } finally {
- if (respStream != null) {
- respStream.close();
- }
- }
- }
-
- exception = null;
- break;
- } catch (UnsupportedOperationException e) {
- try {
- EntityUtils.consume(httpEntity);
- } catch (IOException e2) {
-
- }
- throw new RuntimeException(e.getMessage(), e);
- } catch (IOException e) {
- e.printStackTrace();
- exception = e;
- try {
- EntityUtils.consume(httpEntity);
- } catch (IOException e2) {
-
- }
- if (i < 2) {
- try {
- Thread.sleep(5);
- } catch (InterruptedException e2) {
-
- }
- }
- }
- }
- if (exception != null) {
- throw exception;
- }
-
- }
- Map<String, Object> response = new HashMap<String, Object>();
- response.put("responseCode", responseCode);
- response.put("responseData", responseBytes);
- String loggerResponseString = getLoggerString(responseBytes, 256);
- return response;
- }
-
- private static Map<String, Object> sendGet(CloseableHttpClient httpClient, String url, Map<String, String> headers) throws IOException {
- String tag = "[HttpRequester] [GET " + url + "]";
- int responseCode = -1;
- byte[] responseBytes = null;
-
- HttpGet request = new HttpGet(url);
- if (headers != null && headers.size() > 0) {
- for (String name : headers.keySet()) {
- String value = headers.get(name);
- request.setHeader(name, value);
- }
- }
- HttpEntity httpEntity = null;
- IOException exception = null;
- for (int i = 0; i < 3; i++) {
- try {
- CloseableHttpResponse response = httpClient.execute(request);
- responseCode = response.getStatusLine().getStatusCode();
- httpEntity = response.getEntity();
-
- byte[] responseBody = EntityUtils.toByteArray(httpEntity);
- if (responseBody != null) {
- responseBytes = responseBody;
- } else {
- InputStream respStream = null;
- try {
- respStream = httpEntity.getContent();
- int respBodySize = respStream.available();
- if (respBodySize <= 0)
- throw new IOException("Invalid respBodySize: " + respBodySize);
- responseBytes = new byte[respBodySize];
- if (respStream.read(responseBytes) != respBodySize)
- throw new IOException("Read respBody Error");
- } catch (Exception e) {
- } finally {
- if (respStream != null) {
- respStream.close();
- }
- }
- }
-
- exception = null;
- break;
- } catch (UnsupportedOperationException e) {
- try {
- EntityUtils.consume(httpEntity);
- } catch (IOException e2) {
-
- }
- throw new RuntimeException(e.getMessage(), e);
- } catch (IOException e) {
- e.printStackTrace();
- exception = e;
- try {
- EntityUtils.consume(httpEntity);
- } catch (IOException e2) {
-
- }
- if (i < 2) {
- try {
- Thread.sleep(5);
- } catch (InterruptedException e2) {
-
- }
- }
- }
- }
- if (exception != null) {
- throw exception;
- }
- Map<String, Object> response = new HashMap<String, Object>();
- response.put("responseCode", responseCode);
- response.put("responseData", responseBytes);
- String loggerResponseString = getLoggerString(responseBytes, 256);
- System.out.println(tag + " response " + responseCode + " " + loggerResponseString);
- return response;
- }
-
- private static String getLoggerString(final byte[] data, int maxLength) {
- String loggerString;
- if (data.length > maxLength) {
- byte[] shortData = new byte[maxLength];
- System.arraycopy(data, 0, shortData, 0, shortData.length);
- try {
- loggerString = new String(shortData, "UTF-8") + "...";
- } catch (UnsupportedEncodingException e) {
- loggerString = new String(shortData) + "...";
- }
- } else {
- try {
- loggerString = new String(data, "UTF-8");
- } catch (UnsupportedEncodingException e) {
- loggerString = new String(data);
- }
- }
-
- char[] chars = new char[loggerString.length()];
- loggerString.getChars(0, loggerString.length(), chars, 0);
- for (int i = 0; i < chars.length; i++) {
- char c = chars[i];
- if (c == '\n' || c == '\r') {
- chars[i] = ' ';
- }
- }
- return new String(chars);
- }
-
- private static CloseableHttpClient getHttpClient(String requestPath) {
- if (httpClients.containsKey(requestPath)) {
- return httpClients.get(requestPath);
- }
- if (poolingHttpClientConnectionManager == null) {
- synchronized (o) {
- if (poolingHttpClientConnectionManager == null) {
- poolingHttpClientConnectionManager = HttpClientUtils.createHttpClientConnectionManager();
- }
- }
- }
- synchronized (httpClients) {
- if (httpClients.containsKey(requestPath)) {
- return httpClients.get(requestPath);
- }
- CloseableHttpClient httpClient = HttpClientUtils.createHttpClient(poolingHttpClientConnectionManager);
- httpClients.put(requestPath, httpClient);
- return httpClient;
- }
- }
-
- private static class HttpClientUtils {
-
- // 默认连接超时
- private static int defaultConnectTimeout = 6000;
- // 默认读取超时
- private static int defaultReadTimeout = 30000;
-
- public static CloseableHttpClient createHttpClient(PoolingHttpClientConnectionManager connManager) {
- //HttpHost httpHost = new HttpHost("10.211.55.4", 8888);
- CloseableHttpClient httpClient = HttpClients.custom()
- //.setProxy(httpHost)
- .setConnectionManager(connManager)
- .disableContentCompression()
- .setSSLContext(getSslcontext())
- .setDefaultRequestConfig(getRequestConfig())
- .build();
- return httpClient;
- }
-
- public static PoolingHttpClientConnectionManager createHttpClientConnectionManager() {
- SSLConnectionSocketFactory sslConnectionSocketFactory = null;
- try {
- sslConnectionSocketFactory = new SSLConnectionSocketFactory(getSslcontext(), SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
- } catch (Exception e) {
- throw new RuntimeException(e.getMessage(), e);
- }
- Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
- .register("https", sslConnectionSocketFactory)
- .register("http", new PlainConnectionSocketFactory())
- .build();
- PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
- cm.setMaxTotal(500);
- cm.setDefaultMaxPerRoute(500);
- return cm;
- }
-
- private static RequestConfig getRequestConfig() {
- RequestConfig defaultRequestConfig = RequestConfig.custom()
- .setConnectionRequestTimeout(defaultConnectTimeout)
- .setSocketTimeout(defaultReadTimeout)
- .build();
- return defaultRequestConfig;
- }
-
- private static SSLContext getSslcontext() {
- SSLContext sslContext = null;
- try {
- sslContext = SSLContext.getInstance("TLS");
- TrustManager tm = new X509TrustManager() {
- @Override
- public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
- }
-
- @Override
- public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
- }
-
- @Override
- public X509Certificate[] getAcceptedIssuers() {
- return null;
- }
- };
- sslContext.init(null, new TrustManager[]{tm}, null);
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- return sslContext;
- }
- }
- }
|