java - 从 HttpURLConnection 获取数据作为文本抛出 javax.net.ssl.SSLHandshakeException for SourceForge.net

标签 java json ssl

Java 版本 1.8.0_121,I see a solution for Java 9 only

Description:

我的目标是获取有关 SourceForge 项目的信息,例如项目的总下载量。 SourceForge 有一个名为 SourceForge Downloads Stats API 的 API .

所以我创建了一个简单的程序,将结果视为原始文本,我不需要它作为 JSON。

例如,我正在获取有关 Apache OpenOffice 的信息下载和更多 -> Link , you can try it to see

但我无法使用 Java 获取数据,导致以下错误。我已经在其他网站上测试了该代码并且运行良好,但是对于这个我不知道为什么。

Java Code:

import java.net.*;
import java.io.*;

public class URLReader {
    public static void main(String[] args) throws Exception {

        //Create HttpURLConnection 
        HttpURLConnection httpcon = (HttpURLConnection) new URL(
                "https://sourceforge.net/projects/openofficeorg.mirror/files/stats/json?start_date=2014-10-29&end_date=2014-11-04").openConnection();
        //In case it might to the trick...
        httpcon.addRequestProperty("User-Agent", "Mozilla/5.0");
        //Read the inputstream
        BufferedReader in = new BufferedReader(new InputStreamReader(httpcon.getInputStream()));

        //Print everything
        String inputLine;
        while ( ( inputLine = in.readLine() ) != null)
            System.out.println(inputLine);
        in.close();
    }
}

Error:

Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal a
lert: handshake_failure
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2023)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1125)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:13
75)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Abstra
ctDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnectio
n.java:1546)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection
.java:1474)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLCon
nectionImpl.java:254)
    at aaTester.URLReader.main(URLReader.java:13)

最后

如能提供上述解决方案,我们将不胜感激。

尝试使用 Andy 的答案会产生同样的错误。

最佳答案

转动 comment来自@GOXR3PLUS 的答案:

至少升级到 Java 8u161(或 Java 9)会使 SSLHandshakeException 从 SourceForge 下载时消失。

关于java - 从 HttpURLConnection 获取数据作为文本抛出 javax.net.ssl.SSLHandshakeException for SourceForge.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44031398/

相关文章:

ssl - 如何配置 Camel jetty 生产者端点以使用 SSL 证书

java - Web服务上下文: Is it there a way to inject it any where appart from my WebService?

Java - Stream - 收集每 N 个元素

java - 使用给定经纬度的谷歌地图计算距离

arrays - 当我使用字符串 : Any 时,我的 JSON 数组为空

javascript - 从 JSON 中提取键值数组

java - BouncyCaSTLe Provider Jar 导致 Java 堆空间错误

滚动时 JavaFX 图标从 TreeTableView 中随机消失,性能也很慢

php - $getJSON 未被识别为数组

java - 线程 "main"javax.net.ssl.SSLHandshakeException : sun. security.validator.ValidatorException 中的异常:找不到受信任的证书