验收修改
This commit is contained in:
parent
d91423afcd
commit
312a170edf
173
src/main/java/com/zhgd/xmgl/util/HttpsUtils.java
Normal file
173
src/main/java/com/zhgd/xmgl/util/HttpsUtils.java
Normal file
@ -0,0 +1,173 @@
|
||||
package com.zhgd.xmgl.util;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.net.ssl.*;
|
||||
import java.io.*;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.security.SecureRandom;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
||||
public class HttpsUtils {
|
||||
private static final Logger logger= LoggerFactory.getLogger(HttpsUtils.class);
|
||||
|
||||
/**
|
||||
* 连接超时设置
|
||||
*/
|
||||
private static final int TIMEOUT = 60 * 1000;
|
||||
|
||||
static HostnameVerifier hostnameVerifier = new HostnameVerifier() {
|
||||
public boolean verify(String urlHostName, SSLSession session) {
|
||||
logger.warn("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
private static final class DefaultTrustManager 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 null;
|
||||
}
|
||||
}
|
||||
|
||||
public static String getExceptionDetail(Exception e) {
|
||||
if (e == null) return "";
|
||||
StringBuilder stringBuffer = new StringBuilder(e.toString() + "\n");
|
||||
StackTraceElement[] messages = e.getStackTrace();
|
||||
for (StackTraceElement message : messages) {
|
||||
stringBuffer.append("\t").append(message.toString()).append("\n");
|
||||
}
|
||||
return stringBuffer.toString();
|
||||
}
|
||||
|
||||
private static String getCharset(HttpsURLConnection connection){
|
||||
String charset = "UTF-8";
|
||||
Pattern pattern = Pattern.compile("charset=\\S*");
|
||||
String contentTypeStr = connection.getContentType();
|
||||
if (contentTypeStr == null || "".equals(contentTypeStr)) {
|
||||
charset = "";
|
||||
} else {
|
||||
Matcher matcher = pattern.matcher(contentTypeStr);
|
||||
if (matcher.find()) {
|
||||
charset = matcher.group().replace("charset=", "");
|
||||
}
|
||||
if (charset == null || "".equals(charset)) {
|
||||
charset = "";
|
||||
}
|
||||
}
|
||||
return charset;
|
||||
}
|
||||
|
||||
public static String doPost(String requestUrl, String jsonObj) throws Exception {
|
||||
Map<String,String > headers = new HashMap<>();
|
||||
headers.put("Content-type", "application/json; charset=utf-8");
|
||||
headers.put("Accept", "application/json");
|
||||
return doPostSSL(requestUrl, headers, jsonObj, "UTF-8", null);
|
||||
}
|
||||
|
||||
/**
|
||||
* POST: HTTPS协议,json请求格式,返回实例对象
|
||||
*/
|
||||
private static <T> T doPostSSL(String url,Map<String,String > headers,String params,String paramsEncoding,Class<T> targetClass){
|
||||
String result="";
|
||||
BufferedReader responseReader = null;
|
||||
HttpsURLConnection httpsConn=null;
|
||||
OutputStreamWriter paramsWriter = null;
|
||||
int statusCode=500;
|
||||
String msg="接口请求失败!";
|
||||
try{
|
||||
SSLContext ctx = null;
|
||||
ctx = SSLContext.getInstance("TLS");
|
||||
ctx.init(new KeyManager[0], new TrustManager[] { new DefaultTrustManager() }, new SecureRandom());
|
||||
URL realUrl = new URL(url);
|
||||
httpsConn = (HttpsURLConnection) realUrl.openConnection();
|
||||
httpsConn.setSSLSocketFactory(ctx.getSocketFactory());
|
||||
httpsConn.setHostnameVerifier(hostnameVerifier);
|
||||
httpsConn.setRequestMethod("POST");
|
||||
httpsConn.setDoInput(true);
|
||||
httpsConn.setDoOutput(true);
|
||||
httpsConn.setConnectTimeout(TIMEOUT);
|
||||
//请求头
|
||||
if(null != headers && !headers.isEmpty()) headers.forEach(httpsConn::setRequestProperty);
|
||||
|
||||
httpsConn.connect();
|
||||
paramsWriter= new OutputStreamWriter(httpsConn.getOutputStream(), paramsEncoding);
|
||||
paramsWriter.write(params);
|
||||
paramsWriter.flush();
|
||||
|
||||
|
||||
// 定义 BufferedReader输入流来读取URL的响应
|
||||
statusCode = httpsConn.getResponseCode();
|
||||
InputStream input=null;
|
||||
if (statusCode == HttpURLConnection.HTTP_OK
|
||||
|| statusCode == HttpURLConnection.HTTP_CREATED
|
||||
|| statusCode == HttpURLConnection.HTTP_ACCEPTED) {
|
||||
input=httpsConn.getInputStream();
|
||||
msg = "接口请求成功!";
|
||||
} else {
|
||||
input=httpsConn.getErrorStream();
|
||||
msg = "接口请求失败!,状态码非200";
|
||||
}
|
||||
|
||||
String charset = getCharset(httpsConn);
|
||||
if (charset == null || "".equals(charset)) {
|
||||
responseReader = new BufferedReader(new InputStreamReader(input));
|
||||
} else {
|
||||
responseReader = new BufferedReader(new InputStreamReader(input, charset));
|
||||
}
|
||||
|
||||
String line;
|
||||
while ((line = responseReader.readLine()) != null) {
|
||||
result += line;
|
||||
}
|
||||
}catch(Exception e){
|
||||
logger.error("doPostSSL 请求失败! URL={}, 异常为-->{}",url,getExceptionDetail(e));
|
||||
}finally {
|
||||
if(responseReader != null){
|
||||
try {
|
||||
responseReader.close();
|
||||
} catch (IOException e) {
|
||||
logger.error(getExceptionDetail(e));
|
||||
}
|
||||
}
|
||||
if (httpsConn != null) {
|
||||
try {
|
||||
httpsConn.disconnect();
|
||||
} catch (Exception e) {
|
||||
logger.error(getExceptionDetail(e));
|
||||
}
|
||||
}
|
||||
|
||||
if (paramsWriter != null) {
|
||||
try {
|
||||
paramsWriter.close();
|
||||
} catch (Exception e) {
|
||||
logger.error(getExceptionDetail(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
logger.info("doPostSSL URL={} 状态码{} {} headers={} params={} 请求结果:{}",url,statusCode,msg,headers,params,result);
|
||||
if("".equals(result)){
|
||||
logger.error("doPostSSL 请求失败 URL={}, headers={} 请求参数->{}",url,headers,params);
|
||||
return null;
|
||||
}
|
||||
return JSONObject.parseObject(result,targetClass);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user