问题:
1 2 3 4 5 |
Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:350) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:293) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:288) |
代码
Java
1 2 3 4 5 6 7 |
@Test void dd() throws IOException, InterruptedException { var c = HttpClient.newHttpClient(); var req = HttpRequest.newBuilder(URI.create("https://www.sxpdf.com/lishi/page/3/")).GET().build(); final var resp = c.send(req, HttpResponse.BodyHandlers.ofString()).body(); assertNotNull(resp); } |
解决:
.sslContext(sslContext())
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
@Test void dd2() throws IOException, InterruptedException { var c = HttpClient.newBuilder() .sslContext(sslContext()) .build(); var req = HttpRequest.newBuilder(URI.create("https://www.sxpdf.com/lishi/page/3/")).GET().build(); final var resp = c.send(req, HttpResponse.BodyHandlers.ofString()).body(); assertNotNull(resp); } private javax.net.ssl.SSLContext sslContext() { try { //org.apache.http.ssl.SSLContextBuilder#SSLContextBuilder return new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { @Override public boolean isTrusted(final X509Certificate[] chain, final String authType) throws CertificateException { return true; } }).build(); } catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) { throw new RuntimeException(e); } } |
参考:
https://blog.csdn.net/qq_42561919/article/details/100065675