首页 > 解决方案 > 循环解析来自 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)

标签: javaurlcurl

解决方案


推荐阅读