以文本形式从HttpURLConnection获取数据会引发SourceForge.net的javax.net.ssl.SSLHandshakeException

以文本形式从HttpURLConnection获取数据会引发SourceForge.net的javax.net.ssl.SSLHandshakeException,java,json,ssl,Java,Json,Ssl,Java版本1.8.0_121 说明: 我的目标是获取有关SourceForge项目的信息,例如项目的总下载量。 SourceForge有一个用于调用的API 所以我创建了一个简单的程序,将结果作为原始文本,我不需要它作为JSON 例如,我正在获取有关下载和更多内容的信息-> 但是我无法使用Java获取数据,导致下面的错误。我已经在其他网站上测试了代码,效果很好,但对于这一个,我不知道为什么 Java代码: 错误: 最后 如能解决上述问题,将不胜感激 尝试使用Andy的答案也会产生相同的错误。您

Java版本1.8.0_121

说明:

我的目标是获取有关
SourceForge
项目的信息,例如项目的总下载量。
SourceForge
有一个用于调用的API

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

例如,我正在获取有关下载和更多内容的信息->

但是我无法使用
Java
获取数据,导致下面的错误。我已经在其他网站上测试了代码,效果很好,但对于这一个,我不知道为什么

Java代码:

错误:

最后 如能解决上述问题,将不胜感激


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

您不能要求最终用户安装策略,但在策略的实施方面有一些编程方法免责声明:不建议这样做,可能会影响TOS和ITAR

在TLS协商之前在
静态
块中执行的此代码应允许JVM使用AES-256密码套件

if (Cipher.getMaxAllowedKeyLength("AES") < 256) {
  try {
    Field field = Class.forName("javax.crypto.JceSecurity").
    getDeclaredField("isRestricted");
    field.setAccessible(true);
    field.set(null, java.lang.Boolean.FALSE);
  } catch (Exception e) {
    fail("Could not override JCE cryptography strength policy setting");
    fail(e.getMessage());
  }
}
if(Cipher.getMaxAllowedKeyLength(“AES”)<256){
试一试{
Field=Class.forName(“javax.crypto.JceSecurity”)。
getDeclaredField(“受限制”);
字段。setAccessible(true);
set(null,java.lang.Boolean.FALSE);
}捕获(例外e){
失败(“无法覆盖JCE加密强度策略设置”);
失败(如getMessage());
}
}

以下内容仅用于获取我实际需要的下载。所以这不是完整的答案

下面是一种使用SourceForge提供的下载服务获取总下载量的棘手方法:

要获得每
周/日/年的下载量
,只需稍作更改即可 位代码以删除不适当的文本

检查从BufferedReaded返回的文本,就像我为 总下载量

导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.util.array;
公共类URL阅读器{
公共静态void main(字符串[]args)引发异常{
//System.out.println(Cipher.getMaxAllowedKeyLength(“AES”);
//创建HttpURLConnection
HttpURLConnection httpcon=(HttpURLConnection)新URL(“https://img.shields.io/sourceforge/dt/xr3player.svg”).openConnection();
httpcon.addRequestProperty(“用户代理”、“Mozilla/5.0”);
BufferedReader in=新的BufferedReader(新的InputStreamReader(httpcon.getInputStream());
//逐行阅读
字符串行=”,输入行;
而((inputLine=in.readLine())!=null){
行+=“\n”+输入行;
系统输出打印LN(输入线);
}
in.close();
//获取SourceForge下载
System.out.println(“总下行速度:“+line.split”(“”[1])。split(“/Total”)[0]);
}
}
将@GOXR3PLUS转换为答案:


升级到至少Java 8u161(或Java 9)可以使
SSLHandshakeException
从SourceForge下载。

和Oracle Java(副OpenJDK)开箱即用不允许256位对称密码;查看j8或尝试存档部分以获取任何早期版本。@dave_thompson_085 O_O哇,我甚至不知道它。。。如果你能提供一个使用对称密码的示例,我将单击“接受”按钮15次。@dave_thompson_085我需要我的应用程序是可移植的[我想将jar文件添加到库中],所以我检查了一下,但我看到了完整的黑客程序,以便这样做。。。感谢您指导我正确的研究方法:)我在HttpURLConnection之前的代码中使用了它,但运气不好,还是同样的错误。我之前对链接的看法是错误的,因此,基于此链接->似乎我将从现在开始在生产中使用Java 9:)我猜您仍然可以使用Groovy覆盖它,但我没有尝试。要测试它:)
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)
if (Cipher.getMaxAllowedKeyLength("AES") < 256) {
  try {
    Field field = Class.forName("javax.crypto.JceSecurity").
    getDeclaredField("isRestricted");
    field.setAccessible(true);
    field.set(null, java.lang.Boolean.FALSE);
  } catch (Exception e) {
    fail("Could not override JCE cryptography strength policy setting");
    fail(e.getMessage());
  }
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Arrays;


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

        //System.out.println(Cipher.getMaxAllowedKeyLength("AES"));

        //Create HttpURLConnection  
        HttpURLConnection httpcon = (HttpURLConnection) new URL("https://img.shields.io/sourceforge/dt/xr3player.svg").openConnection();
        httpcon.addRequestProperty("User-Agent", "Mozilla/5.0");
        BufferedReader in = new BufferedReader(new InputStreamReader(httpcon.getInputStream()));

        //Read line by line
        String line = "" , inputLine;
        while ( ( inputLine = in.readLine() ) != null) {
            line += "\n" + inputLine;
            System.out.println(inputLine);
        }
        in.close();

        //Get SourceForge Downloads 
        System.out.println("Total Downlads: "+line.split("<text x=\"98.5\" y=\"14\">")[1].split("/total")[0]);
    }

}