版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yan3013216087/article/details/84398608
一、增加对HTTPS协议的支持
出现异常后,通过 Google 搜索了一下,找到了 WebMagic 作者黄大的解决方式,详见 Https下无法抓取只支持TLS1.2的站点
于是按照黄大说的方式来做
-
首先复制源码中的 HttpClientGenerator 与 HttpClientDownloader 到自己的项目中。
-
修改 HttpClientGenerator 的代码,只需要修改 buildSSLConnectionSocketFactory 这个方法为如下即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
... private SSLConnectionSocketFactory buildSSLConnectionSocketFactory() { try { return new SSLConnectionSocketFactory(createIgnoreVerifySSL(), new String[]{"SSLv3", "TLSv1", "TLSv1.1", "TLSv1.2"}, null, new DefaultHostnameVerifier()); // 优先绕过安全证书 } catch (KeyManagementException e) { logger.error("ssl connection fail", e); } catch (NoSuchAlgorithmException e) { logger.error("ssl connection fail", e); } return SSLConnectionSocketFactory.getSocketFactory(); } ...
注意: DefaultHostnameVerifier 需要使用
org.apache.http.conn.ssl.DefaultHostnameVerifier
,而不要使用sun.net.www.protocol.https.DefaultHostnameVerifier
- 修改 HttpClientDownloader 中引用的 HttpClientGenerator 为你修改后的类。
-
设置爬虫 Spider 的 Downloader 为 你修改的 HttpClientDownloader。
1
Spider.create(new GithubRepoPageProcessor()).setDownloader(new HttpClientDownloader()).addUrl("https://github.com/code4craft").thread(5).run();
-
运行后,发现控制台已经可以正常输出所抓取网页的内容了
二、出现
RSA premaster secret error: SunTls12RsaPremasterSecret KeyGenerator not available异常
经google是Eclipse设置导致的,设置如下即可解决:
Window > Preferences > Java > Installed JREs > jdk8_64bit > Edit...
首先点击编辑,如下图
其次点击Restore Default按钮、
变更成jre下面lib下的jar重新install即可解决问题!!!