`java.net.SocketException:连接重置,带有代理的请求

时间:2018-09-09 13:32:58

标签: java https

我正在尝试将HTTP POST请求发送到具有HTTPS代理的站点。

我目前正在这样做:

System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
HttpPost request = new HttpPost("https://example.com");

                    HttpHost proxy2 = new HttpHost("proxy ip here", 8080, "https");
                    RequestConfig config = RequestConfig.custom()
                            .setProxy(proxy2)
                            .build();
                    request.setConfig(config);


                    String json = "\"" + username + "\"";
                    StringEntity entity = new StringEntity(json);
                    request.setEntity(entity);
                    request.setHeader("Accept", "application/json");
                    request.setHeader("Content-type", "application/json");

                    CloseableHttpResponse response = httpclient.execute(request, context);

                    HttpEntity entityresponse = response.getEntity();
                    responseString = EntityUtils.toString(entityresponse, "UTF-8");

                    response.close();
                    httpclient.close();

但是我得到这个:java.net.SocketException: Connection reset

我也尝试了很多代理和不同的URL,但是仍然存在相同的问题。

如果我在代理主机行中设置了HTTP URL和http参数,则工作正常,但是我需要HTTPS:/

任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果要调用https url,则必须将证书安装在jre security / lib文件夹中。

要安装证书,请按照以下步骤操作:

  1. 从以下位置下载InstallCert.java文件:https://confluence.atlassian.com/download/attachments/180292346/InstallCert.java?version=1&modificationDate=1315453596921
  2. 将InstallCert.java复制到任何位置。
  3. 运行:javac InstallCert.java
  4. 运行:java InstallCert example.com:port
  5. 将生成jssecacerts文件
  6. 将其复制到JAVA_HOME \ jre \ lib \ security文件夹中

我希望这可以解决您的问题。