webmagic 爬取https的网站抛avax.net.ssl.SSLHandshakeException异常

news/2024/12/23 5:58:30/

webmagic 抓取带有https的网站,抛出的异常javax.net.ssl.SSLHandshakeException。
初步解决办法:
1,在自己的项目中新建httpclient文件夹,新建类HttpClientGenerator, 复制webmagic源码中的 HttpClientGenerator.
2.修改 HttpClientGenerator 的代码,需要修改 buildSSLConnectionSocketFactory 这个方法。

java">private SSLConnectionSocketFactory buildSSLConnectionSocketFactory() {try {return new SSLConnectionSocketFactory(createIgnoreVerifySSL(), new String[]{"SSLv2Hello","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();}

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

做以上修改之后如果问题依然没解决,报错:
SSLException: Certificate for *** doesn‘t match any of the subject alternative
此错误是说明校验证书和域名失败,绕过就可以了。
正常情况下SSL连接会验证码所有证书信息
.register(“https”, new SSLConnectionSocketFactory(sslcontext)).build();

修改HttpClientGenerator的构造方法跳过验证,注释掉的代码为源码:

java"> public HttpClientGenerator() {
//        Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create()
//                .register("http", PlainConnectionSocketFactory.INSTANCE)
//                .register("https", buildSSLConnectionSocketFactory())
//                .build();
//        SSLContext sslcontext = sslContext(keyStorePath, keyStorePassword);SSLContext sslcontext = null;try {sslcontext = createIgnoreVerifySSL();} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);} catch (KeyManagementException e) {throw new RuntimeException(e);}Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create().register("http", PlainConnectionSocketFactory.INSTANCE)//  只忽略域名验证码.register("https", new SSLConnectionSocketFactory(sslcontext, NoopHostnameVerifier.INSTANCE)).build();connectionManager = new PoolingHttpClientConnectionManager(reg);connectionManager.setDefaultMaxPerRoute(100);}

http://www.ppmy.cn/news/1438563.html

相关文章

@PostConstruct ,InitializingBean接口,init-method属性 三者的概念

在Spring框架中&#xff0c;在bean被实例化后&#xff0c;有三种方式可以用来执行Bean的初始化逻辑&#xff1a;PostConstruct注解、实现InitializingBean接口以及使用init-method属性。 PostConstruct 来源与适用性&#xff1a;PostConstruct是Java EE规范的一部分&#xff…

CPPTest实例分析(C++ Test)

1 概述 CppTest是一个可移植、功能强大但简单的单元测试框架&#xff0c;用于处理C中的自动化测试。重点在于可用性和可扩展性。支持多种输出格式&#xff0c;并且可以轻松添加新的输出格式。 CppTest下载地址&#xff1a;下载地址1  下载地址2 下面结合实例分析下CppTest如…

智能解决装箱问题:使用优化算法实现高效包装

组合优化问题 组合优化&#xff08;Combinatorial Optimization&#xff0c;CO&#xff09;数学优化研究的一个分支。主要关注的是从有限的对象集合中寻找最优解的问题。这个词的由来主要是由“组合”和“优化”两部分构成。“组合”指的是从有限的对象集合中选择一部分的过程…

单机三pxc节点集群,+docker-haproxy2.0负载均衡实现

一.下载 https://www.haproxy.org/download/2.0/src/haproxy-2.0.5.tar.gz 或者在这里下载&#xff08;下面需要的各个配置文件都有&#xff09;&#xff1a; https://download.csdn.net/download/cyw8998/89170129 二.编写文件&#xff0c;制作docker镜像 1.Dockerfile&a…

运行django

确保app被注册 urls.py中编写url 视图对应关系 命令行启动 python manage.py runserver

【Linux】学习记录_15_POSIX信号量

15 POSIX信号量 15.1 POSIX信号量基本概念 信号量&#xff08;Semaphore&#xff09;是一种实现进程/线程间通信的机制&#xff0c;可以实现进程/线程之间同步或临界资源的互斥访问&#xff0c; 常用于协助一组相互竞争的进程/线程来访问临界资源。在多进程/线程系统中&#…

C++ //练习 13.4 假定Point是一个类类型,它有一个public的拷贝构造函数,指出下面程序片段中哪些地方使用了拷贝构造函数:

C Primer&#xff08;第5版&#xff09; 练习 13.4 练习 13.4 假定Point是一个类类型&#xff0c;它有一个public的拷贝构造函数&#xff0c;指出下面程序片段中哪些地方使用了拷贝构造函数&#xff1a; Point global; Point foo_bar(Point arg){Point local arg, *heap ne…

06.JAVAEE之线程4

1.定时器 1.1 定时器是什么 定时器也是软件开发中的一个重要组件. 类似于一个 " 闹钟 ". 达到一个设定的时间之后 , 就执行某个指定好的代码. 约定一个时间,时间到达之后,执行某个代码逻辑, 定时器非常常见,尤其是在进行网络通信的时候, 需要有等待的最大时间&…