import com.alibaba.fastjson2.JSONObject;
import javax.net.ssl.SSLContext;
import javax.net.ssl.X509TrustManager;
import java.net.URI;
import java.net.http.HttpRequest;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.time.Duration;
/**
* JDK HttpClient HTTPS请求绕过SSL证书校验
*
* @module
* @author:lkl
* @date: 2024-03-23
*/
public class JDKHttpsUtil {
/**
* 绕过SSL证书校验GET请求
* @param url
* @return:
* @Author: lkl
* @date:
*/
public static JSONObject doGet(String url) throws Exception {
SSLContext sc = getTrustSSLContext();
//jdk自带的http客户端只能验证受信任证书,若要跳过证书验证只能设置下面的参数
System.setProperty("jdk.internal.httpclient.disableHostnameVerification", "true");
HttpRequest.Builder httpRequestBuilder = HttpRequest.newBuilder().GET().timeout(Duration.ofMinutes(10));
java.net.http.HttpClient httpClient = java.net.http.HttpClient.newBuilder().sslContext(sc).build();
HttpRequest request = httpRequestBuilder.copy().uri(URI.create(url)).build();
java.net.http.HttpResponse<String> response = httpClient.send(request, java.net.http.HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
return JSONObject.parseObject(response.body());
}
private static SSLContext getTrustSSLContext() throws Exception {
SSLContext context = SSLContext.getInstance("SSL");
context.init(null, new X509TrustManager[]{new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}}, new SecureRandom());
return context;
}
}
JDK HttpClient HTTPS请求绕过SSL证书校验
最新推荐文章于 2025-01-09 09:44:48 发布