java - 循环解析来自 url 的数据时出现 SSLHandshakeException
问题描述
一起晚安。我的问题是,如果我打开一个 url 并获取内容,它在第二次循环运行时总是失败(是的,url 都是正确的)。开发工具包:11.0.1
public String getUrlContent(String url) {
System.out.println("URL: " + url);
for (int i = 0; i < 100; i++) {
try (Scanner scanner = new Scanner(new URL(url).openStream(),
StandardCharsets.UTF_8.toString())) {
scanner.useDelimiter("\\A");
String returnString = scanner.hasNext() ? scanner.next() : "";
scanner.close();
return returnString;
} catch (Exception e) {
e.printStackTrace();
System.out.println("###############################################");
System.out.println("#Connection failed..#");
System.out.println("#Trying again... #");
System.out.println(e);
System.out.println("###############################################");
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
System.out.println("Connection failed to often. Program closed.");
System.exit(0);
return null;
}
我尝试了什么?当我在测试文件中调用该函数时,不会发生错误。但是,该函数包含相同的代码。你有什么想法?正如我所说,它总是在第二个 url 处中止。函数周围的代码应该没有影响,因为只有结果存储在数组中,我可以从对象中获取。
错误:
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:128)
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308)
at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:279)
at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:181)
at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164)
at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1152)
at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1063)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402)
at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567)
at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1581)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1509)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:245)
at java.base/java.net.URL.openStream(URL.java:1117)
at helper.webHelper.getUrlContent(webHelper.java:42)
at urlParser.parser.checkLastUpdate(parser.java:41)
at main.main(main.java:29)
解决方案
推荐阅读
- r - 将长字符串拆分为多个数据框列,而不拆分为一个单词
- javascript - 如何在谷歌脚本中调用预定义的日期?
- java - 构建命令失败。使用参数执行进程时出错
- javascript - 有没有一种算法,给定一个整数列表,返回一个大小为 N 的整数列表,其中总值为 V±100?
- python - 你会如何使用 `for` 或 `while` 循环来查找句子中的第 n 个单词
- datatables - JS数据表行组使用对象不起作用
- vega-lite - 如何在 Vega Lite 中底部中间对齐图例?
- r - 在 R 中为日期添加一天
- java - (IPA) 国际音标字符在 mac 中显示正常,但在 windows 中不显示
- python - 无法单击带有硒 python的标签