在写网站爬虫时,运行遇到如下报错:
这里核心报错信息:
.SunCertPathBuilderException: unable to find valid certification path to requested target
解决方案为:
本人从网上查到了解决方案有两种,一种是直接绕过SSL证书认证,不过网上好多人都说不安全,原理嘛咱也不深究了,因为就爬取一些公开数据,又不涉及隐私啥的,电脑也是个人空白电脑无任何隐私数据,所以暂不考虑安全问题,这是前提。可以快速解决当下的问题。
另外一种是从目标网站上下载证书到本地,然后添加证书到本地证书库。相对复杂很多,小白不建议尝试,因为当你在搜到这篇帖子的时候肯定是想快速解决问题,有兴趣的可以去查一下,教程很多。
个人观点,勿杠。
将下面的代码放到你的Java类里面,哪里都行,作为一个Java方法可以被调用到就可以。
在访问或者调用目标网站的Java方法前,先调用这个方法:initTSL(); 就可以了。亲测有效。
/**
* 绕过HTTPS验证
*/
static public void initTSL() {
try {
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, new X509TrustManager[]{new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}}, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
} catch (NoSuchAlgorithmException | KeyManagementException e) {
//处理异常
e.printStackTrace();
}
}