如何处理httpclient的ssl错误
2017-06-04 14:39
211 查看
今天使用httpclient 4.5,爬取https网站时报错:
网上搜索时,各种答案,最后采用下列方法解决:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1627) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:204) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:198) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:994) at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:142) at sun.security.ssl.Handshaker.processLoop(Handshaker.java:533) at sun.security.ssl.Handshaker.process_record(Handshaker.java:471) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:904) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1132) at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:643) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:78) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) at org.apache.commons.httpclient.HttpConnection.flushRequestOutputStream(HttpConnection.java:828) at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2116) at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323) at simpleapachehttp.Main.main(Main.java:41) Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:302) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:205) at sun.security.validator.Validator.validate(Validator.java:235) at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:147) at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:230) at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:270) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:973) ... 17 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:191) at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:255) at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:297) ... 23 more
网上搜索时,各种答案,最后采用下列方法解决:
org.apache.http.ssl.SSLContextBuilder context_b = SSLContextBuilder.create(); context_b.loadTrustMaterial(new org.apache.http.conn.ssl.TrustSelfSignedStrategy()); SSLContext ssl_context = context_b.build(); org.apache.http.conn.ssl.SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(ssl_context, new org.apache.http.conn.ssl.DefaultHostnameVerifier()); HttpClientBuilder builder = HttpClients.custom() .setSSLSocketFactory(sslSocketFactory); httpclient = builder.build();
相关文章推荐
- 错误处理(Error-Handling):为何、何时、如何(rev#2)
- 错误处理(Error-Handling):为何、何时、如何(rev#2)
- Silverlight 调用 WCF 如何处理错误
- C# 如何处理抛出的异常,或者已知的错误
- 错误处理(Error-Handling):为何、何时、如何(rev#2)
- APT HOWTO-第七章 如何处理错误
- 如何处理创建DB2工具目录数据库的时候遇到的SQL1005N错误?
- 错误处理(Error-Handling):为何、何时、如何(rev#2)
- 错误处理(Error-Handling):为何、何时、如何(rev#2)
- [BTS]10008错误如何处理?
- 错误处理(Error-Handling):为何、何时、如何(rev#2)
- 如何处理在WINDOWS VISTA上安装VS2008时遇到要求安装WINDOWS XP SP2的错误和QQ对战平台安装后不能登录的问题
- 如何在Web Part 中方便的进行错误处理和错误信息的显示?
- 错误处理(Error-Handling):为何、何时、如何(rev#2)
- 如何处理CLOB字段值超过4000字节时提示:“ORA-01704:文字字符串过长”的错误
- [BTS]5740, 5743错误如何处理?
- 如何处理CLOB字段值超过4000字节时提示:“ORA-01704:文字字符串过长”的错误
- 错误处理(Error-Handling):为何、何时、如何(rev#2)
- 如何在 SQL Server 的存储过程和函数里进行错误处理
- 如何处理“溢出”错误