提交 1fe72416 authored 作者: 姜武杰's avatar 姜武杰

恢复原请求连接,看是否可以重现问题

上级 13a2b3cd
package com.openapi.sdk.util; package com.openapi.sdk.util;
import okhttp3.*; import lombok.extern.slf4j.Slf4j;
import javax.net.ssl.HostnameVerifier; import javax.net.ssl.*;
import javax.net.ssl.SSLContext; import java.io.DataOutputStream;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException; import java.io.IOException;
import java.security.KeyManagementException; import java.io.InputStreamReader;
import java.security.NoSuchAlgorithmException; import java.net.HttpURLConnection;
import java.net.URL;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.util.concurrent.TimeUnit;
@Slf4j
public class HttpsUtils { public class HttpsUtils {
public HttpsUtils() {
}
private static final OkHttpClient client; public static String doPost(String url, int connentTimeout, int readTimeout) throws Exception {
log.info("========>进入自定义HttpsUtils.doPost1方法");
HttpURLConnection conn = null;
InputStreamReader isReader = null;
StringBuffer result = new StringBuffer();
static {
try { try {
// 创建一个信任所有证书的 TrustManager trustAllHttpsCertificates();
TrustManager[] trustAllCerts = new TrustManager[]{ HostnameVerifier hv = new HostnameVerifier() {
new X509TrustManager() { public boolean verify(String urlHostName, SSLSession session) {
@Override System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
public void checkClientTrusted(X509Certificate[] chain, String authType) { return true;
} }
};
@Override HttpsURLConnection.setDefaultHostnameVerifier(hv);
public void checkServerTrusted(X509Certificate[] chain, String authType) { conn = (HttpURLConnection)(new URL(url)).openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setConnectTimeout(connentTimeout);
conn.setReadTimeout(readTimeout);
isReader = new InputStreamReader(conn.getInputStream(), "UTF-8");
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;
}
try {
if (conn != null) {
conn.disconnect();
}
} catch (Exception var19) {
System.err.println("关闭连接出错了!\n" + var19.getMessage() + "\n");
throw var19;
} }
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
} }
return result.toString();
} }
};
// 安装所有信任的 SSL 套接字工厂 public static String doPost(String url, String param, int readTimeout, int connectTimeout) throws Exception {
SSLContext sslContext = SSLContext.getInstance("SSL"); log.info("========>进入自定义HttpsUtils.doPost2方法");
sslContext.init(null, trustAllCerts, new SecureRandom()); InputStreamReader isReader = null;
HttpURLConnection conn = null;
DataOutputStream dos = null;
StringBuffer result = new StringBuffer();
// 创建一个允许所有主机名的 HostnameVerifier try {
HostnameVerifier hostnameVerifier = (hostname, session) -> { trustAllHttpsCertificates();
System.out.println("Warning: URL Host: " + hostname + " vs. " + session.getPeerHost()); HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
return true; return true;
}
}; };
HttpsURLConnection.setDefaultHostnameVerifier(hv);
conn = (HttpURLConnection)(new URL(url)).openConnection();
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;
// 创建 OkHttpClient 并启用连接池 while((rlength = isReader.read(bfchar)) != -1) {
client = new OkHttpClient.Builder() String temp = new String(bfchar, 0, rlength);
.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustAllCerts[0]) result.append(temp);
.hostnameVerifier(hostnameVerifier) }
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS) return result.toString();
.writeTimeout(10, TimeUnit.SECONDS) } catch (Exception var21) {
.retryOnConnectionFailure(true) System.err.println("发送 POST 请求出现异常!" + var21.getMessage() + "e:" + var21);
.build(); throw var21;
} catch (NoSuchAlgorithmException | KeyManagementException e) { } finally {
throw new RuntimeException("Failed to create OkHttpClient", e); 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;
} }
public static String doPost(String url, int connectTimeout, int readTimeout) throws IOException { }
Request request = new Request.Builder() }
.url(url)
.post(RequestBody.create("", MediaType.get("application/x-www-form-urlencoded")))
.build();
try (Response response = client.newCall(request).execute()) { private static void trustAllHttpsCertificates() throws Exception {
if (!response.isSuccessful()) { TrustManager[] trustAllCerts = new TrustManager[1];
throw new IOException("Unexpected code " + response); TrustManager tm = new miTM();
trustAllCerts[0] = tm;
SSLContext sc = SSLContext.getInstance("SSL");
sc.init((KeyManager[])null, trustAllCerts, (SecureRandom)null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} }
return response.body().string();
static class miTM implements TrustManager, X509TrustManager {
miTM() {
} }
public X509Certificate[] getAcceptedIssuers() {
return null;
} }
public static String doPost(String url, String param, int readTimeout, int connectTimeout) throws IOException { public boolean isServerTrusted(X509Certificate[] certs) {
RequestBody body = RequestBody.create(param, MediaType.get("application/x-www-form-urlencoded")); return true;
Request request = new Request.Builder() }
.url(url)
.post(body)
.build();
try (Response response = client.newCall(request).execute()) { public boolean isClientTrusted(X509Certificate[] certs) {
if (!response.isSuccessful()) { return true;
throw new IOException("Unexpected code " + response); }
public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
} }
return response.body().string();
public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {
} }
} }
} }
package com.openapi.sdk.util;
import okhttp3.*;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.concurrent.TimeUnit;
public class HttpsUtils2 {
private static final OkHttpClient client;
static {
try {
// 创建一个信任所有证书的 TrustManager
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
};
// 安装所有信任的 SSL 套接字工厂
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new SecureRandom());
// 创建一个允许所有主机名的 HostnameVerifier
HostnameVerifier hostnameVerifier = (hostname, session) -> {
System.out.println("Warning: URL Host: " + hostname + " vs. " + session.getPeerHost());
return true;
};
ConnectionPool connectionPool = new ConnectionPool(100, 10, TimeUnit.MINUTES);
// 创建 OkHttpClient 并启用连接池
client = new OkHttpClient.Builder()
.sslSocketFactory(sslContext.getSocketFactory(), (X509TrustManager) trustAllCerts[0])
.hostnameVerifier(hostnameVerifier)
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.retryOnConnectionFailure(false)
.connectionPool(connectionPool)
.build();
} catch (NoSuchAlgorithmException | KeyManagementException e) {
throw new RuntimeException("Failed to create OkHttpClient", e);
}
}
public static String doPost(String url, int connectTimeout, int readTimeout) throws IOException {
Request request = new Request.Builder()
.url(url)
.post(RequestBody.create("", MediaType.get("application/x-www-form-urlencoded")))
.build();
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}
return response.body().string();
}
}
public static String doPost(String url, String param, int readTimeout, int connectTimeout) throws IOException {
RequestBody body = RequestBody.create(param, MediaType.get("application/x-www-form-urlencoded"));
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}
return response.body().string();
}
}
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论