Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法通过代理调用API_Java_Api_Http_Tomcat - Fatal编程技术网

Java 无法通过代理调用API

Java 无法通过代理调用API,java,api,http,tomcat,Java,Api,Http,Tomcat,我在本地Tomcat服务器上部署了一个java应用程序。这个应用程序需要调用一些API才能正常工作,但不幸的是,我用不同的方法遇到了不同的异常,我不知道如何解决这个问题。当我在本地运行此代码段时,它工作正常。但部署后,它不再工作。 我尝试的第一件事是: CloseableHttpClient httpclient = HttpClients.createDefault(); try { HttpHost target = new HttpHost(apiA

我在本地Tomcat服务器上部署了一个java应用程序。这个应用程序需要调用一些API才能正常工作,但不幸的是,我用不同的方法遇到了不同的异常,我不知道如何解决这个问题。当我在本地运行此代码段时,它工作正常。但部署后,它不再工作。 我尝试的第一件事是:

        CloseableHttpClient httpclient = HttpClients.createDefault();
    try {
        HttpHost target = new HttpHost(apiAdress, 443, "HTTPS");
        HttpHost proxy = new HttpHost(proxyAdress, 80, "HTTP");

        RequestConfig config = RequestConfig.custom()
                .setProxy(proxy)
                .build();
        HttpGet request = new HttpGet(getPath);
        request.setConfig(config);

        CloseableHttpResponse response = httpclient.execute(target, request);
        try {
            LOG.debug("----------------------------------------");
            LOG.debug(response.getStatusLine().toString());

            HttpEntity responseEntity = response.getEntity();
            if(responseEntity!=null) {
                String responseString = EntityUtils.toString(responseEntity);
                return JsonUtils.getObjectFromJson(responseString, NachrichtenResponse.class);
            }
        } catch (Exception e) {
            LOG.error(e.getMessage(),e);
        } finally {
            response.close();
        }
    } catch (Exception ex) {
        LOG.error(ex.getMessage(),ex);
    } finally {
        try {
            httpclient.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    return null;
这导致以下例外情况:

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:146)
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382)
... 106 common frames omitted
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
当我像这样将代理的方案更改为HTTPS时

HttpHost proxy = new HttpHost("94.100.132.14", 80, "HTTPS");
这导致以下例外情况:

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:146)
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382)
... 106 common frames omitted
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

在没有配置代理的情况下,异常连接被拒绝。我真的不知道问题出在哪里,我很难弄明白。有没有人曾经遇到过类似的问题并有解决方案?

您不需要将证书添加到信任库吗?

您是否尝试通过谷歌搜索异常消息?因为80是http端口,所以尝试使用
新的HttpHost(“94.100.132.14”,80,“http”)
?当您说“部署后”,你的意思是说你部署在“组织”基础设施中?通常,有很多防火墙和网络配置用于传入和传出流量。您是在回答还是只是要求澄清?后者应在评论中发布。请重新措辞,避免给人留下澄清问题的印象。把这变成一个自信的回答。