首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java11JSOUP SSLHandshakeException

Java11JSOUP SSLHandshakeException
EN

Stack Overflow用户
提问于 2021-09-21 13:56:22
回答 1查看 296关注 0票数 2

这是我在这里的第一篇帖子,所以如果我做错了什么,请告诉我。

我在Java 11中编写了几行代码,以便从一个使用JSOUP (1.14.2)的网站上获取信息。由于webstore作为多个页面的数据,所以我使用一个循环来获取我想要的所有url。

以下是我所做工作的一个简化例子:

代码语言:javascript
复制
for (int i = 1; i < 36; i++) {
    String url = ("https://www.play-in.com/rachat/hotlist/magic?p=" + i);

    try {
        doc = Jsoup.connect(url).get();
    } catch (Exception e) {
        logger.info("Impossible de récuppérer les éléments de la page " + i + " : " + e);
    }

    //  here i'm parsing the HTML to return an array of object
}

当我运行这个项目时,我得到:

代码语言:javascript
复制
[main] INFO  service.MagicBazarReader  -  Failed to get data from page 2 : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure  
[main] INFO  service.MagicBazarReader  -  Failed to get data from page 3 : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure  
[main] INFO  service.MagicBazarReader  -  Failed to get data from page 4 : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure  
[main] INFO  service.MagicBazarReader  -  Failed to get data from page 5 : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure  
[main] INFO  service.MagicBazarReader  -  Failed to get data from page 6 : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure  
[...]
[main] INFO  ISmellProfits  - Number of result after HTML parsing : 24

诸若此类。因此,第一个get()总是成功的,我可以操作结果,但是在调用multipe Jsoup.connect()时,它似乎已经发出了。

由于我正在调用一个HTTPS url,我的第一个想法是颁发证书,我尝试了这个解决方案,How to connect via HTTPS using Jsoup?,但是没有帮助。如果真的需要一个certificate,我不应该第一次访问url,但是我可能错了,因为我对这个领域不太了解。

第二个想法是使用并行流:

代码语言:javascript
复制
List <String> links = new ArrayList<>();
for (int i = 1; i < 36; i++) {
    String url = ("https://www.play-in.com/rachat/hotlist/magic?p=" + i);
    links.add(url);
}

links.parallelStream().forEach(link - > {
    Document doc = new Document("");
    try {
        doc = Jsoup.connect(link).get();

        // here i'm parsing the HTML to return an array of object 
    } catch (Exception e) {
        logger.info("Impossible de récuppérer les éléments de la page " + link.substring(link.length() - 2) + " : " + e);
    }
});

我有更好的结果,但仍然不完美:

代码语言:javascript
复制
[ForkJoinPool.commonPool-worker-17] INFO  service.MagicBazarReader  - Failed to get data from page 12 : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure  
[ForkJoinPool.commonPool-worker-23] INFO  service.MagicBazarReader  -  Failed to get data from page 30 : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure  
[ForkJoinPool.commonPool-worker-9] INFO  service.MagicBazarReader  -  Failed to get data from page 5 : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure  
[ForkJoinPool.commonPool-worker-27] INFO  service.MagicBazarReader  -  Failed to get data from page 35 : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure  
[main] INFO  service.MagicBazarReader  -  Failed to get data from page 22 : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure  
[ForkJoinPool.commonPool-worker-3] INFO  service.MagicBazarReader  -  Failed to get data from page 1 : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure  
[ForkJoinPool.commonPool-worker-7] INFO  service.MagicBazarReader  -  Failed to get data from page 2 : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure  
[ForkJoinPool.commonPool-worker-21] INFO  service.MagicBazarReader  -  Failed to get data from page 17 : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure  
[ForkJoinPool.commonPool-worker-5] INFO  service.MagicBazarReader  -  Failed to get data from page 31 : javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure  
[...]
[main] INFO  ISmellProfits  - Number of result after HTML parsing : 286

所以,在HTML解析之后,我得到了更多的结果,但是它们并不一致,因为每次运行时我都有不同的数字,而且我仍然得到SSLHandshakeException

我想不通了,所以我问是否有人知道是什么导致了异常被抛出。

我刚开始使用JSOUP,所以我仍然不太了解它。我认为JSOUP一次只能在连接上使用,循环在第一个连接关闭之前调用新的连接。

感谢您的阅读。

EN

回答 1

Stack Overflow用户

发布于 2021-10-07 14:18:26

下决心

因此,问题似乎在于JDK11和TLSv1.3在JDK中默认启用的协议中的存在。我试着使用JDK 16,现在没有问题了。链接到更深入解释的帖子:Java 11 and 12 SSL sockets fail on a handshake_failure error with TLSv1.3 enabled

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69270140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档