java - 当我尝试使用 Jsoup 在课堂上获取超过 1 个文档时,为什么会出现 handshake_failure 错误?
问题描述
似乎我只能为每个类创建一个使用 Jsoup 的 get 请求,因为当我换出 时CITYPARKSURL
,CITYPARKSURL2
我放入的那个会getParkNames()
编译,而另一个会给出错误。
我在 IntelliJ 中运行了这段代码,但是当我把它移到 Eclipse 中时,它开始给我这些握手错误。有人知道为什么吗?(不幸的是,我必须在 Eclipse 中完成我的项目。)
这是我的代码和错误:
public class DublinCityParksParse{
private final String CITYPARKSURL = "https://www.dublincity.ie/residential/parks/dublin-city-parks/visit-park";
private final String CITYPARKSURL1 = "https://www.dublincity.ie/residential/parks/dublin-city-parks/visit-park?page=1";
private final String CITYPARKSURL2 = "https://www.dublincity.ie/residential/parks/dublin-city-parks/visit-park?page=2";
private final String CITYPARKSURL3 = "https://www.dublincity.ie/residential/parks/dublin-city-parks/visit-park?page=3";
private String[] parkNamesHyphs = {"/eamonn-ceannt-park", "/balcurris"};
private List<String> parkNames = new ArrayList<String>();
private ArrayList<String> parkNamesHyphen = new ArrayList<String>();
private List<Park> parks = new ArrayList<Park>();
public DublinCityParksParse() {
getParkNames();
getParkNames1();
}
public void getParkNames() {
try {
Document docGetDetails = Jsoup.connect(CITYPARKSURL).get();
Elements elsClass = docGetDetails.getElementsByClass("search-result__title");
for(Element els : elsClass) {
parkNames.add(els.text());
}
// System.out.println(docGetDetails.toString());
System.out.println(parkNames.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void getParkNames1() {
try {
Document docGetDetails1 = Jsoup.connect(CITYPARKSURL1).get();
Elements elsClass1 = docGetDetails1.getElementsByClass("search-result__title");
for(Element els : elsClass1) {
parkNames.add(els.text());
}
System.out.println(docGetDetails1.toString());
System.out.println(parkNames.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[]args) {
new DublinCityParksParse();
}}
错误:
javax.net.ssl.SSLHandshakeException:收到致命警报:java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128) 处 java.base/sun.security.ssl.Alert.createSSLException(Alert) 处的 handshake_failure .java:117) 在 java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308) 在 java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:279) 在java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:181) 在 java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164) 在 java.base/sun.security。 ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1152) 在 java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1063) 在 java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl. java:402) 在 java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567) 在 java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java: 163) 在 org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:707) 在 org.jsoup.helper.HttpConnection.execute 的 org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:732) (HttpConnection.java:297) 在 org.jsoup.helper.HttpConnection.get(HttpConnection.java:286) 在 DublinCityParksParse.getParkNames1(DublinCityParksParse.java:68) 在 DublinCityParksParse.(DublinCityParksParse.java:30) 在 DublinCityParksParse.main(都柏林城市公园Parse.java:182)www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:163) 在 org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:732) 在 org.jsoup.helper.HttpConnection$Response.execute(HttpConnection. java:707) at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:297) at org.jsoup.helper.HttpConnection.get(HttpConnection.java:286) at DublinCityParksParse.getParkNames1(DublinCityParksParse.java:68) at DublinCityParksParse.(DublinCityParksParse.java:30) 在 DublinCityParksParse.main(DublinCityParksParse.java:182)www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:163) 在 org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:732) 在 org.jsoup.helper.HttpConnection$Response.execute(HttpConnection. java:707) at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:297) at org.jsoup.helper.HttpConnection.get(HttpConnection.java:286) at DublinCityParksParse.getParkNames1(DublinCityParksParse.java:68) at DublinCityParksParse.(DublinCityParksParse.java:30) 在 DublinCityParksParse.main(DublinCityParksParse.java:182)297) 在 org.jsoup.helper.HttpConnection.get(HttpConnection.java:286) 在 DublinCityParksParse.getParkNames1(DublinCityParksParse.java:68) 在 DublinCityParksParse.(DublinCityParksParse.java:30) 在 DublinCityParksParse.main(DublinCityParksParse.java:182) )297) 在 org.jsoup.helper.HttpConnection.get(HttpConnection.java:286) 在 DublinCityParksParse.getParkNames1(DublinCityParksParse.java:68) 在 DublinCityParksParse.(DublinCityParksParse.java:30) 在 DublinCityParksParse.main(DublinCityParksParse.java:182) )
解决方案
我敢打赌,您在 IntelliJ 和 Eclipse 之间运行不同的 Java 版本,并且 Eclipse 版本很旧(如 1.7 或旧的 1.8)。这就是它在第一个 IDE 而不是第二个 IDE 中工作的原因。
您应该将 JDK 更新到当前支持的版本。那些旧版本的 Java 在当前的 TLS / SSL 网站上存在问题。他们缺少许多密码套件、SNI 支持、TLS 1.3 支持等。您可以为旧版本修补所有这些,但我无法想象这是您想要做的事情。
推荐阅读
- flutter - Flutter 中的原始触摸/滑动数据?与带有 Android Studio 的 Java 相比?
- python - SQLAlchemy IntegrityError:但是哪些记录?
- python - 如何在“if”循环中使用我的列表?
- javascript - 检查多个对象数组的项
- react-native - 如何在 React Native 中缓存视频
- c# - 了解 ADO.NET 的“连接生命周期”
- java - 无法使用 spring kafka 生产者向 Kafka 发送任何消息 - 超时异常
- sql - Redshift 中的溢出错误
- excel - 宏 Excel:检查单元格是否为空
- javascript - 承诺功能无法识别外部变量