当前位置: 首页 > 知识库问答 >
问题:

从HttpURLConnection获取数据时,文本抛出javax。网ssl。SourceForge的SSLHandshakeException。网

勾岳
2023-03-14

Java版本1.8.0_121,我看到的解决方案仅适用于Java 9

描述:

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

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

例如,我正在获取有关ApacheOpenOffice下载和更多信息-

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

Java代码:

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();
    }
}

错误:

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)

以上问题的解决方案将不胜感激。

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

共有3个答案

萧琛
2023-03-14

下面只是为了得到我真正需要的下载。所以这不是完整的答案。

以下是使用SourceForge为下载提供的svg映像获取总下载量的一种棘手方法:

要获得每周/日/年的下载量,只需稍微修改一下代码即可删除不合适的文本。

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

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]);
    }

}
锺离嘉茂
2023-03-14

您不能要求最终用户安装策略,但在策略的实施方面有一些编程方法。免责声明:不建议这样做,可能会影响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());
  }
}
慕璞
2023-03-14

将@GOXR3PLUS的评论转化为答案:

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

 类似资料:
  • 我得到一个"异常在线程"主"javax.net.ssl.SSLHandshake异常:收到致命警报:handshake_failure"下面的代码。有人知道如何修复它吗?

  • 我正在尝试打开一个htttps网站。网址是前。https://x.xx.xx.xx/.我已经写了打击代码。 字符串url=”https://x.xx.xx.xx/"; URL obj=新URL(URL); HttpURLConnection con=(HttpURLConnection)obj。openConnection(); //可选的默认值是GETcon.setRequest estmeth

  • 我正在编写一个JMeter测试计划,以连接到SSL端口(Tomcat Connector)。在JDK8(1.8.0_51)上使用三个JMeter SSL客户端实现(HttpClient4、HttpClient3.1、Java)中的任何一个连接到SSL端口时,我会收到一个SSLHandshakeExc0019(handshake_failure)。如果我使用JDK7(1.7。0_75)-一切都像预期

  • 我收到了非常流行的“SSLHandShakeException”。 我正在使用IntelliJ运行一个java客户端,该客户端旨在处理Web服务请求/响应。我们通过一组凭据和url连接到服务器并传入请求文件。 我所做的一切 > 已验证正在构造的URL是否在浏览器中工作。 使用以下说明将证书添加到信任存储区,Keytool说明 已验证truststore使用的JRE是否正确。 我正在使用httpCl

  • 我尝试了许多不同的方法,试图使用HttpURLConnection将数据从我的Android应用程序上传到我的服务器上的PHP脚本,但在服务器上由PHP创建的文件中没有显示任何内容。我成功地使用了HTTPClient,但是我必须切换到使用HttpURLConnection。该应用程序在运行时不会崩溃。我确信我忽略了一些简单的东西。我的PHP脚本运行良好,甚至返回了预期的响应,但是我还没有发现我的A

  • 我正在尝试使用Spring RestTemplate调用POST Rest调用: 这个https://server.com有证书:webapi。tartu-x86。p12我将证书导入C:\Java_8\jre\lib\security\cacerts usinf keytool 运行代码后,我出现以下错误: 我使用的是Java1.8.091 有人能帮忙吗?