I / O异常(java.net.SocketException)

时间:2016-02-24 23:22:02

标签: java ssl netbeans https get

我一直在尝试向HTTPS网站发出GET请求。出于测试目的,我将我的代码指向https://httpbin.org/ip,这是我在StackOverflow上的其他地方找到的示例所指示的。我生成了一个密钥库,代码成功加载了该文件,并且正确地(据我所知)创建了CloseableHttpClient。

代码一直执行,直到我在输出窗口中看到“执行请求”消息。然后它挂起60秒(HttpGet的标准超时)并抛出以下错误:

  

2016年2月24日下午5:01:58 org.apache.http.impl.execchain.RetryExec执行   信息:处理{s}的请求时捕获的I / O异常(java.net.SocketException) - > https://httpbin.org:443:连接重置   2016年2月24日下午5:01:58 org.apache.http.impl.execchain.RetryExec执行   信息:正在重试{s} - > https:httpbin.org:443

的请求

我已经尝试生成一个新的密钥库,以及不同的SSLSocket设置(比如忽略所有证书),但我总是得到同样的错误。我确信我在生成密钥/证书时犯了一个错误,但我似乎无法确定在哪里。完整代码如下。

编辑:我正在使用Netbeans。

    // Trust own CA and all self-signed certs
    SSLContext sslcontext = SSLContexts.custom()
            .loadTrustMaterial(new File("src/keystore.jks"), "password".toCharArray(),
                    new TrustSelfSignedStrategy())
            .build();
    // Allow TLSv1 protocol only
    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
            sslcontext,
            new String[] { "TLSv1" },
            null,
            SSLConnectionSocketFactory.getDefaultHostnameVerifier());
    CloseableHttpClient httpclient = HttpClients.custom()
            .setSSLSocketFactory(sslsf)
            .build();
    try {

        HttpGet httpget = new HttpGet("https://httpbin.org/ip");


        System.out.println("Executing request " + httpget.getRequestLine());

        CloseableHttpResponse response = httpclient.execute(httpget);

        try {
            HttpEntity entity = response.getEntity();

            System.out.println("----------------------------------------");
            System.out.println(response.getStatusLine());
            EntityUtils.consume(entity);
        } finally {
            response.close();
        }
    } finally {
        httpclient.close();
    }

0 个答案:

没有答案