Java 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?

Что я не так? Альтернативы?


person y0dA    schedule 26.01.2015    source источник


Ответы (1)


Я могу думать о нескольких проблемах, которые могут вызвать это:

  • Вы уверены, что ваш https-прокси не требует аутентификации? В этом случае вам, вероятно, потребуется установить учетные данные в контексте и выполнить запрос, используя контекст и клиент. Посмотрите этот пример: http://www.the-swamp.info/blog/java-запросчерезпрокси/

  • Поскольку вы используете прокси-сервер https и запрашиваете URL-адрес https (безопасность конечной точки SSL/TLS), у вас могут возникнуть проблемы с проверкой сертификата. Проверьте это хорошее объяснение для прокси-серверов https: ">Плюсы и минусы использования Http-прокси по сравнению с https-прокси?

person Watchmaker    schedule 27.03.2015