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-request-through-proxy/

  • Тъй като използвате https прокси и изисквате https url (SSL/TLS сигурност на крайната точка), може да имате проблеми с валидирането на сертификата. Вижте това добро обяснение за https проксита: https://stackoverflow.com/questions/10440690/pros-and-cons-of-using-a-http-proxy-v-s-https-proxy/10442767#10442767

person Watchmaker    schedule 27.03.2015