java - Java 11 JSOUP SSLHandshakeException
问题描述
这是我在这里的第一篇文章,所以如果我做错了什么,请随时告诉我。
我编写了几行代码Java 11
以从带有JSOUP (1.14.2)
. 由于网络商店是多页数据,因此我使用循环来获取我想要的所有 url。
这是我正在做的一个简化示例:
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
}
当我运行程序时,我得到:
[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
真的需要 a 我不应该能够在第一次访问该 url,但我在这里可能错了,因为我对这个域知之甚少。
第二个想法是使用并行流:
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);
}
});
我有更好的结果,但仍然不完美:
[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一次只能有连接,循环在第一个关闭之前调用新的。
谢谢阅读。
解决方案
[解决]
因此,问题似乎在于 JDK11 以及 JDK 中默认启用的协议中存在 TLSv1.3。我尝试使用 JDK 16 并且我不再有问题了。指向更深入解释的帖子的链接:Java 11 and 12 SSL sockets fail on a handshake_failure error with TLSv1.3 enabled
推荐阅读
- .htaccess - 子域的不完整 htaccess
- kubernetes - 在 Kubernetes 1.10 中禁用 heapster 健康检查
- eclipse - Maven 和 Eclipse 使用的 Checkstyle 配置
- c++ - 我的二进制搜索程序简单地关闭了
- c# - 不使用 await 的危险
- angular - 发送表单数据以及 angular6 中上传的文件显示错误 title1 和 title2 not found
- python - 如何在python中制作多边形雷达(蜘蛛)图
- c++ - 添加到数组指针
- swift - 如何仅使用 SceneKit 编辑器在 ARKit 中创建 Portal 效果?
- python - 连接多个数据帧