提交 0639e7f7 authored 作者: 姜武杰's avatar 姜武杰

恢复原来的接口,看是否复现问题

上级 c05c3c60
package com.openapi.sdk.util; package com.openapi.sdk.util;
import lombok.extern.slf4j.Slf4j; import javax.net.ssl.*;
import org.apache.http.HttpEntity; import java.io.DataOutputStream;
import org.apache.http.HttpResponse; import java.io.IOException;
import org.apache.http.client.config.RequestConfig; import java.io.InputStreamReader;
import org.apache.http.client.methods.HttpPost; import java.net.HttpURLConnection;
import org.apache.http.conn.ssl.NoopHostnameVerifier; import java.net.URL;
import org.apache.http.entity.StringEntity; import java.security.SecureRandom;
import org.apache.http.impl.client.CloseableHttpClient; import java.security.cert.CertificateException;
import org.apache.http.impl.client.HttpClients; import java.security.cert.X509Certificate;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;
import javax.net.ssl.SSLContext;
import java.nio.charset.StandardCharsets;
@Slf4j
public class HttpsUtils { public class HttpsUtils {
private static final int MAX_TOTAL = 800; public HttpsUtils() {
private static final int MAX_PER_ROUTE = 20; }
private static final int CONNECT_TIMEOUT = 5000;
private static final int READ_TIMEOUT = 5000;
private static PoolingHttpClientConnectionManager connManager; public static String doPost(String url, int connentTimeout, int readTimeout) throws Exception {
private static CloseableHttpClient httpClient; HttpURLConnection conn = null;
InputStreamReader isReader = null;
StringBuffer result = new StringBuffer();
static {
try { try {
// Create a connection manager with connection pool trustAllHttpsCertificates();
connManager = new PoolingHttpClientConnectionManager(); HostnameVerifier hv = new HostnameVerifier() {
connManager.setMaxTotal(MAX_TOTAL); public boolean verify(String urlHostName, SSLSession session) {
connManager.setDefaultMaxPerRoute(MAX_PER_ROUTE); System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
return true;
// Create an HttpClient with the connection manager }
SSLContext sslContext = new SSLContextBuilder() };
.loadTrustMaterial(null, (certificate, authType) -> true) HttpsURLConnection.setDefaultHostnameVerifier(hv);
.build(); conn = (HttpURLConnection)(new URL(url)).openConnection();
conn.setDoInput(true);
httpClient = HttpClients.custom() conn.setDoOutput(true);
.setSSLContext(sslContext) conn.setUseCaches(false);
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) conn.setRequestMethod("POST");
.setConnectionManager(connManager) conn.setConnectTimeout(connentTimeout);
.build(); conn.setReadTimeout(readTimeout);
} catch (Exception e) { isReader = new InputStreamReader(conn.getInputStream(), "UTF-8");
e.printStackTrace(); char[] bfchar = new char[2048];
int length = 0;
while((length = isReader.read(bfchar)) != -1) {
String temp = new String(bfchar, 0, length);
result.append(temp);
}
} catch (Exception var17) {
System.err.println("发送 POST 请求出现异常!" + var17.getMessage());
throw var17;
} finally {
try {
if (isReader != null) {
isReader.close();
}
} catch (IOException var16) {
System.err.println("关闭数据流出错了!\n" + var16.getMessage() + "\n");
throw var16;
}
} }
}
public static String doPost(String url, int connTimeout, int readTimeout) throws Exception { return result.toString();
return doPost(url, "", connTimeout, readTimeout);
} }
public static String doPost(String url, String param, int readTimeout, int connectTimeout) throws Exception { public static String doPost(String url, String param, int readTimeout, int connectTimeout) throws Exception {
log.info("====>进入自定义HttpsUtils doPost" ); InputStreamReader isReader = null;
HttpURLConnection conn = null;
RequestConfig requestConfig = RequestConfig.custom() DataOutputStream dos = null;
.setConnectTimeout(connectTimeout) StringBuffer result = new StringBuffer();
.setSocketTimeout(readTimeout)
.build(); try {
trustAllHttpsCertificates();
HttpPost httpPost = new HttpPost(url); HostnameVerifier hv = new HostnameVerifier() {
httpPost.setConfig(requestConfig); public boolean verify(String urlHostName, SSLSession session) {
httpPost.setHeader("Content-Type", "application/json; charset=utf-8"); System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
httpPost.setEntity(new StringEntity(param, StandardCharsets.UTF_8)); return true;
}
HttpResponse response = httpClient.execute(httpPost); };
HttpEntity entity = response.getEntity(); HttpsURLConnection.setDefaultHostnameVerifier(hv);
if (entity != null) { conn = (HttpURLConnection)(new URL(url)).openConnection();
return EntityUtils.toString(entity, StandardCharsets.UTF_8); conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestProperty("Content-Length", String.valueOf(param.getBytes("UTF-8").length));
conn.setRequestMethod("POST");
conn.setConnectTimeout(connectTimeout);
conn.setRequestProperty("charset", "UTF-8");
conn.setReadTimeout(readTimeout);
conn.connect();
dos = new DataOutputStream(conn.getOutputStream());
int length = 0;
int totalLength = param.length();
while(length < totalLength) {
int endLength = length + 1024;
if (endLength > totalLength) {
endLength = totalLength;
}
dos.write(param.substring(length, endLength).getBytes("UTF-8"));
length = endLength;
dos.flush();
}
dos.close();
isReader = new InputStreamReader(conn.getInputStream(), "UTF-8");
char[] bfchar = new char[2048];
int rlength = 0;
while((rlength = isReader.read(bfchar)) != -1) {
String temp = new String(bfchar, 0, rlength);
result.append(temp);
}
return result.toString();
} catch (Exception var21) {
System.err.println("发送 POST 请求出现异常!" + var21.getMessage() + "e:" + var21);
throw var21;
} finally {
try {
if (isReader != null) {
isReader.close();
}
} catch (IOException var20) {
System.err.println("关闭数据流出错了!\n" + var20.getMessage() + "\n");
throw var20;
}
try {
if (conn != null) {
conn.disconnect();
}
} catch (Exception var19) {
System.err.println("关闭连接出错了!\n" + var19.getMessage() + "\n");
throw var19;
}
} }
return "";
} }
public static void main(String[] args) throws Exception { private static void trustAllHttpsCertificates() throws Exception {
String url = "https://www.baidu.com"; TrustManager[] trustAllCerts = new TrustManager[1];
String result = HttpsUtils.doPost(url, 5000, 5000); TrustManager tm = new miTM();
System.out.println(result); trustAllCerts[0] = tm;
SSLContext sc = SSLContext.getInstance("SSL");
sc.init((KeyManager[])null, trustAllCerts, (SecureRandom)null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
static class miTM implements TrustManager, X509TrustManager {
miTM() {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public boolean isServerTrusted(X509Certificate[] certs) {
return true;
}
public boolean isClientTrusted(X509Certificate[] certs) {
return true;
}
public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
}
public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {
}
} }
} }
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论