From 566ddb398fa002a7933ec8b9907452a32d4d65eb Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期二, 13 八月 2024 17:43:06 +0800 Subject: [PATCH] 处理预约单 --- UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpClientUtil.java | 304 +++++++++++++++++++++++++++++++++++--------------- 1 files changed, 210 insertions(+), 94 deletions(-) diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpClientUtil.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpClientUtil.java index f00c581..d613fd4 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpClientUtil.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HttpClientUtil.java @@ -1,5 +1,6 @@ package com.stylefeng.guns.modular.system.util; +import com.alibaba.fastjson.JSON; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; @@ -7,19 +8,27 @@ 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.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.message.BasicNameValuePair; +import org.apache.http.ssl.SSLContexts; import org.apache.http.util.EntityUtils; import org.springframework.stereotype.Component; +import javax.net.ssl.SSLContext; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.io.InputStream; +import java.nio.charset.Charset; +import java.security.KeyStore; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.TimeUnit; /** * http工具类 @@ -37,12 +46,34 @@ /** * 创建一个httpClient对象 */ - private void getHttpCline(){ - this.httpClient = HttpClients.createDefault(); +// private void getHttpCline(){ +// //1.创建连接池管理器 +// PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(60000, +// TimeUnit.MILLISECONDS); +// connectionManager.setMaxTotal(1000); +// connectionManager.setDefaultMaxPerRoute(50); +// +// //2.创建httpclient对象 +// this.httpClient = HttpClients.custom() +// .setConnectionManager(connectionManager) +// .disableAutomaticRetries() +// .build(); +// } + private PoolingHttpClientConnectionManager connectionManager; + /** + * 创建一个httpClient对象 + */ + private CloseableHttpClient getHttpCline(){ + return HttpClients.custom() + .setConnectionManager(connectionManager) + .disableAutomaticRetries() + .build(); } - - private void setRequestConfig(){ - + private RequestConfig getRequestConfig(){ + return RequestConfig.custom() + .setConnectTimeout(60000) + .setSocketTimeout(60000) + .build(); } @@ -52,8 +83,9 @@ * @param url 请求地址 * @param params 请求参数 */ - private void setPostHttpRequset(String url, Map<String, Object> params, Map<String, String> header, String contentType){ + private CloseableHttpResponse setPostHttpRequset(String url, Map<String, Object> params, Map<String, String> header, String contentType) throws Exception{ HttpPost httpPost = new HttpPost(url); + httpPost.setConfig(this.getRequestConfig()); if(null != header){ for(String key : header.keySet()){ httpPost.setHeader(key, header.get(key)); @@ -63,27 +95,20 @@ if(null != params){ Set<String> keys = params.keySet(); for(String key : keys){ - list.add(new BasicNameValuePair(key, params.get(key).toString())); + list.add(new BasicNameValuePair(key, null == params.get(key) ? null : params.get(key).toString())); } } - try { - switch (contentType){ - case "form": - httpPost.setEntity(new UrlEncodedFormEntity(list)); - break; - case "json": - ObjectMapper objectMapper = new ObjectMapper(); - String s =objectMapper.writeValueAsString(params); - System.err.println(s); - httpPost.setEntity(new StringEntity(s, ContentType.APPLICATION_JSON)); - break; - } - this.getHttpCline(); - httpResponse = this.httpClient.execute(httpPost); - } catch (IOException e) { - e.printStackTrace(); - this.close(); + switch (contentType){ + case "form": + httpPost.setEntity(new UrlEncodedFormEntity(list, "UTF-8")); + break; + case "json": + ObjectMapper objectMapper = new ObjectMapper(); + String s =objectMapper.writeValueAsString(params); + httpPost.setEntity(new StringEntity(s, ContentType.create(ContentType.APPLICATION_JSON.getMimeType(), Charset.forName("UTF-8")))); + break; } + return getHttpCline().execute(httpPost); } @@ -92,7 +117,7 @@ * @param url 请求地址 * @param params 请求参数 */ - private void setGetHttpRequset(String url, Map<String, Object> params, Map<String, String> header){ + private CloseableHttpResponse setGetHttpRequset(String url, Map<String, Object> params, Map<String, String> header) throws Exception{ StringBuffer sb = new StringBuffer(); String p = ""; if(null != params){ @@ -103,20 +128,86 @@ p = "?" + sb.substring(0, sb.length() - 1); } HttpGet httpGet = new HttpGet(url + p); + httpGet.setConfig(getRequestConfig()); if(null != header){ for(String key : header.keySet()){ httpGet.setHeader(key, header.get(key)); } } - this.getHttpCline(); - try { - httpResponse = this.httpClient.execute(httpGet); - } catch (IOException e) { - e.printStackTrace(); - this.close(); - } + return getHttpCline().execute(httpGet); } + /** + * 获取get请求实例 + * @param url 请求地址 + * @param params 请求参数 + */ +// private CloseableHttpResponse setGetHttpRequset(String url, Map<String, Object> params, Map<String, String> header) throws Exception{ +// StringBuffer sb = new StringBuffer(); +// String p = ""; +// if(null != params){ +// Set<String> keys = params.keySet(); +// for(String key : keys){ +// sb.append(key + "=" + params.get(key) + "&"); +// } +// p = "?" + sb.substring(0, sb.length() - 1); +// } +// HttpGet httpGet = new HttpGet(url + p); +// httpGet.setConfig(getRequestConfig()); +// if(null != header){ +// for(String key : header.keySet()){ +// httpGet.setHeader(key, header.get(key)); +// } +// } +// return getHttpCline().execute(httpGet); +// } +// /** +// * 发送http请求 +// * @param mothed "GET、POST、PUT、HEAD、DELETE、HEAD、OPTIONS" +// * @param url 请求地址 +// * @param params 请求参数 +// * @param header 请求头 +// * @param contentType 参数请求方式form/json +// * @return +// */ +// public String pushHttpRequset(String mothed, String url, Map<String, Object> params, Map<String, String> header, String contentType){ +// String content = null; +// switch (mothed){ +// case "GET": +// this.setGetHttpRequset(url, params, header); +// break; +// case "POST": +// this.setPostHttpRequset(url, params, header, contentType); +// break; +// } +// if(httpResponse.getStatusLine().getStatusCode() == 200){ +// try { +// content = EntityUtils.toString(httpResponse.getEntity()); +// this.close(); +// return content; +// } catch (IOException e) { +// e.printStackTrace(); +// this.close(); +// } +// } +// if(httpResponse.getStatusLine().getStatusCode() == 201){ +// content = "{\"status\":201}"; +// this.close(); +// return content; +// }else{ +// try { +// System.err.println("返回状态码:" + httpResponse.getStatusLine() + "。"); +// content = EntityUtils.toString(httpResponse.getEntity()); +// this.close(); +// return content; +// } catch (IOException e) { +// e.printStackTrace(); +// this.close(); +// } +// } +// this.close(); +// return content; +// } /** * 发送http请求 @@ -127,36 +218,26 @@ * @param contentType 参数请求方式form/json * @return */ - public String pushHttpRequset(String mothed, String url, Map<String, Object> params, Map<String, String> header, String contentType){ - String content = null; + public HttpResult pushHttpRequset(String mothed, String url, Map<String, Object> params, Map<String, String> header, String contentType) throws Exception{ + String randome = UUID.randomUUID().toString(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:S"); + System.err.println(sdf.format(new Date()) + "----(" + randome + ")请求参数:" + JSON.toJSONString(params)); + CloseableHttpResponse httpResponse = null; switch (mothed){ case "GET": - this.setGetHttpRequset(url, params, header); + httpResponse = this.setGetHttpRequset(url, params, header); break; case "POST": - this.setPostHttpRequset(url, params, header, contentType); + httpResponse = setPostHttpRequset(url, params, header, contentType); break; } - if(httpResponse.getStatusLine().getStatusCode() == 200){ - try { - content = EntityUtils.toString(httpResponse.getEntity()); - } catch (IOException e) { - e.printStackTrace(); - this.close(); - } - }else{ - try { - content = "返回状态码:" + httpResponse.getStatusLine() + "。" + EntityUtils.toString(httpResponse.getEntity()); - } catch (IOException e) { - e.printStackTrace(); - this.close(); - } - } - this.close(); - return content; + int statusCode = httpResponse.getStatusLine().getStatusCode(); + String content = EntityUtils.toString(httpResponse.getEntity(), "UTF-8"); + System.err.println(sdf.format(new Date()) + "----(" + randome + ")返回结果:" + content); + HttpResult httpResult = HttpResult.getHttpResult(statusCode, content); + this.close(httpResponse); + return httpResult; } - - /** * 发送XML请求 * @param url 请求地址 @@ -164,57 +245,92 @@ * @param header 自定义请求头 * @return */ - public String pushHttpRequsetXml(String url, String xml, Map<String, String> header){ + public HttpResult pushHttpRequsetXml(String url, String xml, Map<String, String> header) throws Exception{ HttpPost httpPost = new HttpPost(url); + httpPost.setConfig(getRequestConfig()); for(String key : header.keySet()){ httpPost.setHeader(key, header.get(key)); } httpPost.setHeader("Content-Type", "application/xml"); - try { - httpPost.setEntity(new StringEntity(xml, "UTF-8")); - this.getHttpCline(); - httpResponse = this.httpClient.execute(httpPost); - String content = null; - if(httpResponse.getStatusLine().getStatusCode() == 200){ - try { - content = EntityUtils.toString(httpResponse.getEntity(), "UTF-8"); - } catch (IOException e) { - e.printStackTrace(); - this.close(); - } - }else{ - try { - content = "返回状态码:" + httpResponse.getStatusLine() + "。" + EntityUtils.toString(httpResponse.getEntity()); - } catch (IOException e) { - e.printStackTrace(); - this.close(); - } - } - this.close(); - return content; - } catch (IOException e) { - e.printStackTrace(); - this.close(); - } - return null; + httpPost.setEntity(new StringEntity(xml, "UTF-8")); + CloseableHttpResponse httpResponse = getHttpCline().execute(httpPost); + int statusCode = httpResponse.getStatusLine().getStatusCode(); + String content = EntityUtils.toString(httpResponse.getEntity(), "UTF-8"); + HttpResult httpResult = HttpResult.getHttpResult(statusCode, content); + this.close(httpResponse); + return httpResult; } /** + * 请求https发送XML请求 + * @param url 接口路径 + * @param xml 内容 + * @param header 请求头 + * @param certPassword 证书密码 + * @param certPath 证书路径 + * @param certType 证书类型 + * @return + * @throws Exception + */ + public String pushHttpsRequsetXml(String url, String xml, Map<String, String> header, String certPassword, String certPath, String certType) throws Exception{ + HttpPost httpPost = new HttpPost(url); + for(String key : header.keySet()){ + httpPost.setHeader(key, header.get(key)); + } + httpPost.setHeader("Content-Type", "application/xml"); + httpPost.setEntity(new StringEntity(xml, "UTF-8")); + CloseableHttpClient httpCline = this.initCert(certPassword, certPath, certType); + CloseableHttpResponse httpResponse = httpCline.execute(httpPost); + String content = null; + if(httpResponse.getStatusLine().getStatusCode() == 200){ + content = EntityUtils.toString(httpResponse.getEntity(), "UTF-8"); + }else{ + content = "返回状态码:" + httpResponse.getStatusLine() + "。" + EntityUtils.toString(httpResponse.getEntity()); + } + this.close(httpResponse); + httpCline.close(); + return content; + } + + + /** + * 初始化https对象(带证书) + * @param key 证书密码 + * @param certPath 证书路径 + * @param certType 证书类型 + * @throws Exception + */ + private CloseableHttpClient initCert(String key, String certPath, String certType) throws Exception { + KeyStore keyStore = KeyStore.getInstance(certType); + InputStream inputStream = new FileInputStream(new File(certPath)); + try { + keyStore.load(inputStream, key.toCharArray()); + } finally { + inputStream.close(); + } + SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, key.toCharArray()).build(); + SSLConnectionSocketFactory sslsf = + new SSLConnectionSocketFactory(sslcontext, new String[] {"TLSv1"}, null, + SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); + return HttpClients.custom().setSSLSocketFactory(sslsf).build(); + } + + + /** * 关闭资源 */ - private void close(){ + private void close(CloseableHttpResponse httpResponse){ try { - httpClient.close(); - httpResponse.close(); - } catch (IOException e) { + if(null != httpResponse){ + EntityUtils.consume(httpResponse.getEntity());//此处高能,通过源码分析,由EntityUtils是否回收HttpEntity + httpResponse.close(); + } + } catch (Exception e) { e.printStackTrace(); }finally { try { - if(null != httpClient){ - httpClient.close(); - } if(null != httpResponse){ httpResponse.close(); } -- Gitblit v1.7.1