webmagic 下载https网页

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yan3013216087/article/details/84398608

一、增加对HTTPS协议的支持

出现异常后,通过 Google 搜索了一下,找到了 WebMagic 作者黄大的解决方式,详见 Https下无法抓取只支持TLS1.2的站点

于是按照黄大说的方式来做

  1. 首先复制源码中的 HttpClientGenerator 与 HttpClientDownloader 到自己的项目中。

  2. 修改 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

  3. 修改 HttpClientDownloader 中引用的 HttpClientGenerator 为你修改后的类。
  4. 设置爬虫 Spider 的 Downloader 为 你修改的 HttpClientDownloader

    1
    
    Spider.create(new GithubRepoPageProcessor()).setDownloader(new HttpClientDownloader()).addUrl("https://github.com/code4craft").thread(5).run();
    
  5. 运行后,发现控制台已经可以正常输出所抓取网页的内容了

二、出现

RSA premaster secret error: SunTls12RsaPremasterSecret KeyGenerator not available异常

经google是Eclipse设置导致的,设置如下即可解决:

Window > Preferences > Java > Installed JREs > jdk8_64bit > Edit...
首先点击编辑,如下图

其次点击Restore Default按钮、

变更成jre下面lib下的jar重新install即可解决问题!!!
 

猜你喜欢

转载自blog.csdn.net/yan3013216087/article/details/84398608