diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/wps/service/impl/WpsServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/wps/service/impl/WpsServiceImpl.java index 7fc9a13..7a2a41e 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/wps/service/impl/WpsServiceImpl.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/wps/service/impl/WpsServiceImpl.java @@ -10,7 +10,6 @@ import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.AttachmentDetail; import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.AttachmentEntity; import com.chinaunicom.ebtp.mall.cloud.attachment.sdk.model.UploadObject; import com.chinaunicom.mall.ebtp.cloud.security.starter.entity.SecurityEntity; -import com.chinaunicom.mall.ebtp.cloud.userinfo.starter.client.UnifastOAuthClient; import com.chinaunicom.mall.ebtp.common.base.service.IBaseCacheUserService; import com.chinaunicom.mall.ebtp.common.exception.common.CommonExceptionEnum; import com.chinaunicom.mall.ebtp.common.log.OperationLogDetail; @@ -28,11 +27,11 @@ import com.chinaunicom.mall.ebtp.extend.wps.entity.KingSoftWpsRet; import com.chinaunicom.mall.ebtp.extend.wps.entity.KingSoftWpsVo; import com.chinaunicom.mall.ebtp.extend.wps.enums.WpsExceptionEnum; import com.chinaunicom.mall.ebtp.extend.wps.service.WpsService; +import com.chinaunicom.mall.ebtp.extend.wps.util.HttpUtils; import com.chinaunicom.mall.ebtp.extend.wps.util.HttpsUtils; import com.chinaunicom.mall.ebtp.extend.wps.util.MdConstants; import com.chinaunicom.mall.ebtp.extend.wps.vo.*; import lombok.extern.slf4j.Slf4j; -import lombok.val; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -503,8 +502,8 @@ public class WpsServiceImpl implements WpsService { vo.setStaffCode("ebtp"); vo.setFileKey(in.getFileId()); String fileName = in.getFileName(); - vo.setFillName(fileName); - vo.setFillExtension(fileName.substring(fileName.lastIndexOf("."),fileName.length())); + vo.setFillName(fileName.substring(0,fileName.lastIndexOf("."))); + vo.setFillExtension(fileName.substring(fileName.lastIndexOf(".")+1,fileName.length())); vo.setVersion(1); try { @@ -524,8 +523,10 @@ public class WpsServiceImpl implements WpsService { vo.setHost(kswhost); vo.setLastModifiedTime(time); - String json = JSON.toJSONString(vo); - String retJson = HttpsUtils.httpPost(kswpsurl,json); + Map map = JSON.parseObject(JSON.toJSONString(vo), Map.class); + String retJson = HttpsUtils.UrlPost(kswpsurl, "utf-8", map);//httpPost(kswpsurl,json); + + //String retJson = HttpUtils.httpPost(kswpsurl,json); KingSoftWpsRet ret = JSON.parseObject(retJson,KingSoftWpsRet.class); diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/wps/util/HttpUtils.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/wps/util/HttpUtils.java new file mode 100644 index 0000000..11a25de --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/wps/util/HttpUtils.java @@ -0,0 +1,144 @@ +package com.chinaunicom.mall.ebtp.extend.wps.util; + +import lombok.extern.slf4j.Slf4j; + +import javax.net.ssl.*; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.Proxy; +import java.net.URL; +import java.net.URLEncoder; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +@Slf4j +public class HttpUtils { + + public static String httpGet(String path) { + String str = ""; + try { + URL url = new URL(path); + //打开和url之间的连接 + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + PrintWriter out = null; + + /**设置URLConnection的参数和普通的请求属性****start***/ + + conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); + conn.setRequestProperty("Accept", "application/json"); + conn.setRequestProperty("Accept-Encoding", ""); + + /**设置URLConnection的参数和普通的请求属性****end***/ + conn.setDoOutput(true); + conn.setDoInput(true); + + //conn.setRequestMethod("POST");//GET和POST必须全大写 + /**GET方法请求*****start*/ + /** + * 如果只是发送GET方式请求,使用connet方法建立和远程资源之间的实际连接即可; + * 如果发送POST方式的请求,需要获取URLConnection实例对应的输出流来发送请求参数。 + * */ + conn.connect(); + + /**GET方法请求*****end*/ + + /***POST方法请求****start*/ +// out = new PrintWriter(conn.getOutputStream());//获取URLConnection对象对应的输出流 +// +// out.print(data);//发送请求参数即数据 +// +// out.flush();//缓冲数据 + + /***POST方法请求****end*/ + + //获取URLConnection对象对应的输入流 + InputStream is = conn.getInputStream(); + //构造一个字符流缓存 + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + + String line = br.readLine(); + while (line != null) { + str = new String(line.getBytes(), "UTF-8");//解决中文乱码问题 + System.out.println(str); + line = br.readLine(); + } + //关闭流 + is.close(); + //断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。 + //固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。 + conn.disconnect(); + //System.out.println("完整结束"); + } catch (Exception e) { + log.error("错误信息",e); + //e.printStackTrace(); + } + return str; + } + public static String httpPost(String path,String data) { + String str = ""; + try { + log.info("path:"+path); + log.info("data:"+data); + URL url = new URL(path); + + //打开和url之间的连接 + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + PrintWriter out = null; + + /**设置URLConnection的参数和普通的请求属性****start***/ + + conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); + conn.setRequestProperty("Accept", "application/json"); + conn.setRequestProperty("Accept-Encoding", ""); + + /**设置URLConnection的参数和普通的请求属性****end***/ + conn.setDoOutput(true); + conn.setDoInput(true); + + conn.setRequestMethod("POST");//GET和POST必须全大写 + /**GET方法请求*****start*/ + /** + * 如果只是发送GET方式请求,使用connet方法建立和远程资源之间的实际连接即可; + * 如果发送POST方式的请求,需要获取URLConnection实例对应的输出流来发送请求参数。 + * */ + conn.connect(); + + /**GET方法请求*****end*/ + + /***POST方法请求****start*/ + out = new PrintWriter(conn.getOutputStream());//获取URLConnection对象对应的输出流 + + out.print(data);//发送请求参数即数据 + + out.flush();//缓冲数据 + + /***POST方法请求****end*/ + + //获取URLConnection对象对应的输入流 + InputStream is = conn.getInputStream(); + //构造一个字符流缓存 + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + + String line = br.readLine(); + while (line != null) { + str = new String(line.getBytes(), "UTF-8");//解决中文乱码问题 + System.out.println(str); + line = br.readLine(); + } + //关闭流 + is.close(); + //断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。 + //固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。 + conn.disconnect(); + //System.out.println("完整结束"); + } catch (Exception e) { + log.error("错误信息",e); + //e.printStackTrace(); + } + return str; + } +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/wps/util/HttpsUtils.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/wps/util/HttpsUtils.java index 1d6c04f..be70c38 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/wps/util/HttpsUtils.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/wps/util/HttpsUtils.java @@ -1,5 +1,7 @@ package com.chinaunicom.mall.ebtp.extend.wps.util; +import cn.hutool.http.ssl.TrustAnyHostnameVerifier; +import com.chinaunicom.mall.ebtp.common.exception.common.CommonExceptionEnum; import lombok.extern.slf4j.Slf4j; import javax.net.ssl.*; @@ -17,106 +19,48 @@ import java.util.Map; @Slf4j public class HttpsUtils { - - public static String httpGet(String path) { - String str = ""; - try { - URL url = new URL(path); - //打开和url之间的连接 - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - PrintWriter out = null; - - /**设置URLConnection的参数和普通的请求属性****start***/ - - conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); - conn.setRequestProperty("Accept", "application/json"); - conn.setRequestProperty("Accept-Encoding", ""); - - /**设置URLConnection的参数和普通的请求属性****end***/ - conn.setDoOutput(true); - conn.setDoInput(true); - - //conn.setRequestMethod("POST");//GET和POST必须全大写 - /**GET方法请求*****start*/ - /** - * 如果只是发送GET方式请求,使用connet方法建立和远程资源之间的实际连接即可; - * 如果发送POST方式的请求,需要获取URLConnection实例对应的输出流来发送请求参数。 - * */ - conn.connect(); - - /**GET方法请求*****end*/ - - /***POST方法请求****start*/ -// out = new PrintWriter(conn.getOutputStream());//获取URLConnection对象对应的输出流 -// -// out.print(data);//发送请求参数即数据 -// -// out.flush();//缓冲数据 - - /***POST方法请求****end*/ - - //获取URLConnection对象对应的输入流 - InputStream is = conn.getInputStream(); - //构造一个字符流缓存 - BufferedReader br = new BufferedReader(new InputStreamReader(is)); - - String line = br.readLine(); - while (line != null) { - str = new String(line.getBytes(), "UTF-8");//解决中文乱码问题 - System.out.println(str); - line = br.readLine(); - } - //关闭流 - is.close(); - //断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。 - //固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。 - conn.disconnect(); - //System.out.println("完整结束"); - } catch (Exception e) { - log.error("错误信息",e); - //e.printStackTrace(); - } - return str; + + public static String UrlPost(String url,String charSet, Map map){ + return UrlPost(url,charSet,map,null); } - public static String httpPost(String path,String data) { + + public static String UrlPost(String url,String charSet, Map map,Proxy proxy){ String str = ""; try { - log.info("path:"+path); - log.info("data:"+data); - URL url = new URL(path); - //打开和url之间的连接 - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - PrintWriter out = null; + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom()); + URL console = new URL(url); - /**设置URLConnection的参数和普通的请求属性****start***/ +// StringBuffer postData = new StringBuffer(); +// +// Iterator it = map.entrySet().iterator(); +// while (it.hasNext()) { +// Map.Entry pairs = (Map.Entry) it.next(); +// postData.append(pairs.getKey()).append("=") +// .append(URLEncoder.encode(pairs != null && pairs.getValue() != null ? pairs.getValue().toString() : "", charSet)).append("&"); +// } +// System.out.println("请求参数:" + postData); + System.out.println("请求参数:" + map); + HttpsURLConnection conn = null; + if (proxy != null) { + System.out.println("proxy信息=======:" + proxy); + conn = (HttpsURLConnection) console.openConnection(proxy); + } else { + conn = (HttpsURLConnection) console.openConnection(); + } - conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); - conn.setRequestProperty("Accept", "application/json"); - conn.setRequestProperty("Accept-Encoding", ""); + conn.setSSLSocketFactory(sc.getSocketFactory()); + conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); - /**设置URLConnection的参数和普通的请求属性****end***/ - conn.setDoOutput(true); conn.setDoInput(true); + conn.setDoOutput(true); - conn.setRequestMethod("POST");//GET和POST必须全大写 - /**GET方法请求*****start*/ - /** - * 如果只是发送GET方式请求,使用connet方法建立和远程资源之间的实际连接即可; - * 如果发送POST方式的请求,需要获取URLConnection实例对应的输出流来发送请求参数。 - * */ - conn.connect(); + PrintWriter out = new PrintWriter(conn.getOutputStream());//获取URLConnection对象对应的输出流 - /**GET方法请求*****end*/ - - /***POST方法请求****start*/ - out = new PrintWriter(conn.getOutputStream());//获取URLConnection对象对应的输出流 - - out.print(data);//发送请求参数即数据 + out.print(map);//发送请求参数即数据 out.flush();//缓冲数据 - /***POST方法请求****end*/ - //获取URLConnection对象对应的输入流 InputStream is = conn.getInputStream(); //构造一个字符流缓存 @@ -133,11 +77,104 @@ public class HttpsUtils { //断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。 //固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。 conn.disconnect(); - //System.out.println("完整结束"); - } catch (Exception e) { + +// System.out.println("https连接信息======:" + conn); +// BufferedOutputStream hurlBufOus = new BufferedOutputStream(conn.getOutputStream()); +// +// hurlBufOus.write(postData.toString().getBytes("iso8859-1"));// 这里面已经将RequestMethod设置为POST.前面设置无效 +// hurlBufOus.flush(); + +// conn.connect(); +// System.out.println("返回结果状态码:" + conn.getResponseCode()); +// System.out.println("Set-COOKIE:" + conn.getHeaderField("Set-Cookie")); +// printHeaderFields(conn); +// InputStream in = conn.getInputStream(); +// +// BufferedReader reader = new BufferedReader(new InputStreamReader(in, charSet)); +// +// String line = reader.readLine(); +// while (line != null) { +// str = new String(line.getBytes(), "UTF-8");//解决中文乱码问题 +// System.out.println(str); +// line = reader.readLine(); +// } +// +// reader.close(); +// in.close(); +// conn.disconnect(); + }catch (Exception e) { log.error("错误信息",e); - //e.printStackTrace(); + CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName("https请求异常", true); } return str; } + + private static class TrustAnyTrustManager implements 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 new X509Certificate[] {}; + } + + } + + private static class TrustAnyHostnameVerifier implements HostnameVerifier { + @Override + public boolean verify(String hostname, SSLSession session) { + return true; + } + } + + private static void printHeaderFields(HttpsURLConnection conn) { + Map> fields = conn.getHeaderFields(); + Iterator keys = fields.keySet().iterator(); + System.out.println("------------heard print start --------------"); + while (keys.hasNext()) { + String key = keys.next(); + List lists = fields.get(key); + System.out.println("---" + key + " = " + lists); + } + System.out.println("------------heard print end --------------"); + + } + + public static String to2HttpPost(String path, Map data) { + String str = ""; + + try { + URL url = new URL(path); + HttpURLConnection conn = (HttpURLConnection)url.openConnection(); + PrintWriter out = null; + conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); + conn.setRequestProperty("Accept", "application/json"); + conn.setRequestProperty("Accept-Encoding", ""); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setRequestMethod("POST"); + out = new PrintWriter(conn.getOutputStream()); + out.print(data); + out.flush(); + InputStream is = conn.getInputStream(); + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + + for(String line = br.readLine(); line != null; line = br.readLine()) { + str = new String(line.getBytes(), "UTF-8"); + System.out.println(str); + } + + is.close(); + conn.disconnect(); + } catch (Exception var9) { + var9.printStackTrace(); + } + + return str; + } }