Java HttpClient - 通过代理发布文件

标签 java httpclient apache-httpclient-4.x apache-commons-httpclient

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

我正在使用:tomcat7、org.apache.httpcomponents 4.3.4、spring。

以下操作,无需代理即可正常工作,我得到响应状态“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?

我错了什么?替代品?

最佳答案

我可以想到一些可能导致此问题的问题:

关于Java HttpClient - 通过代理发布文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28154383/

相关文章:

java - E/AndroidRuntime : FATAL EXCEPTION: main PID: 19302 java. lang.RuntimeException:无法启动 Activity ComponentInfo

java - 用 Java 写回单词

java - 我缺少类似 : 'isConnected' on ClientDolphin class (open-dolphin) 的内容

.net-core - 如何在 .NET Core 3 中不使用 RestSharp 代理

java - 从网上下载pdf后出现空白页

java - Apache HttpClient 和自定义端口

java - 如何在 Java 中将 http 响应捕获为 Json 对象

java - Android:通过重叠 fragment 可见的按钮

java - 从字符串创建数组

java - 登录网页具有隐藏 token ,该 token 在提交表单时以 POST 形式发送。如何在 Java HttpPost 中使用 token ?