Java HttpClient-通过代理发送文件

Java HttpClient-通过代理发送文件,java,httpclient,apache-httpclient-4.x,apache-commons-httpclient,Java,Httpclient,Apache Httpclient 4.x,Apache Commons Httpclient,我尝试使用代理从我的Web应用程序调用外部网站。此外,还需要在该外部网站上执行POST请求 我使用的是:tomcat7,org.apache.httpcomponents 4.3.4,spring 在没有代理的情况下,follow有效,我得到的响应状态为“200” // uri = "https://punkte.eiv-fobi.de/upload/upload.do" private HttpStatus sendPost(URI uri, File file)

我尝试使用代理从我的Web应用程序调用外部网站。此外,还需要在该外部网站上执行POST请求

我使用的是:tomcat7,org.apache.httpcomponents 4.3.4,spring

在没有代理的情况下,follow有效,我得到的响应状态为“200”

    // uri = "https://punkte.eiv-fobi.de/upload/upload.do"
    private HttpStatus sendPost(URI uri, File file)
        throws ClientProtocolException, IOException {
    HttpClient httpClient = HttpClientBuilder.create().build();
    HttpPost httpPost = new HttpPost(uri);

    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
    FileBody fileBody = new FileBody(file, ContentType.MULTIPART_FORM_DATA);
    builder.addPart(PART_NAME, fileBody);
    httpPost.setEntity(builder.build());

    HttpResponse response = httpClient.execute(httpPost);

    return HttpStatus.valueOf(response.getStatusLine().getStatusCode());
    }
现在我尝试添加代理:

    // uri = "https://punkte.eiv-fobi.de/upload/upload.do"
public HttpStatus sendPostWithProxy(URI uri, File file) throws Exception {
    try {
        // JVM Parameter: -Dhttps.proxyHost and -Dhttps.proxyPort
        String proxyHost = System.getProperty("https.proxyHost");
        String proxyPort = System.getProperty("https.proxyPort");

        HttpClient httpClient = HttpClientBuilder.create().build();
        // CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(uri);
        HttpHost proxy = new HttpHost(proxyHost,
                Integer.valueOf(proxyPort), "https");

        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        FileBody fileBody = new FileBody(file,
                ContentType.MULTIPART_FORM_DATA);
        builder.addPart(PART_NAME, fileBody);
        httpPost.setEntity(builder.build());

        RequestConfig config = RequestConfig.custom().setProxy(proxy)
                .build();
        httpPost.setConfig(config);

        HttpResponse response = httpClient.execute(httpPost);

        return HttpStatus.valueOf(response.getStatusLine().getStatusCode());
    } catch (Exception e) {
        LOGGER.error(
                "exception occurred.",
                e);
    }
    return null;
}
获取以下异常:

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

我怎么了?备选方案?

我可以想到一些可能导致这种情况的问题:

  • 您确定您的https代理不需要身份验证吗?在这种情况下,您可能需要在上下文中设置凭据,并使用上下文和客户端执行请求。请检查以下示例:

  • 由于您使用的是https代理并请求https url(SSL/TLS端点安全性),因此证书验证可能会出现问题。检查以下关于https代理的良好解释: