Настройка прокси-сервера JVM для RestTemplate - apache HttpClientBuilder - PullRequest
0 голосов
/ 10 мая 2018

Я застрял с этой конфигурацией прокси. Я использую RestTemplate, и мне нужно применять прокси для всех вызовов, которые делает RestTemplate. Я пытаюсь использовать аргументы JVM, потому что мне действительно нужен прокси для моего локального устройства разработки.

Код:

import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

public class RestTemplateProxy {

    public static void main(String...strings) {
        System.out.println(System.getProperties());
        PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();

        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(5000)
                .setConnectTimeout(2000)
                .build();
        HttpClient defaultHttpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).setConnectionManager(poolingHttpClientConnectionManager)
                        .build();

        poolingHttpClientConnectionManager.setMaxTotal(200);
        poolingHttpClientConnectionManager.setDefaultMaxPerRoute(200);
        ClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(defaultHttpClient);

        RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory);

        String res = restTemplate.getForObject("API URL.....", String.class);
        System.out.println(res);

    }

}

Как подтверждено:

-Dhttp.proxyHost=localhost -Dhttps.proxyHost=localhost -Dhttp.proxyPort=1212 -Dhttps.proxyPort=1212

В среде без прокси я использовал прокси-сервер для localhost -> Он не смог подключиться. Вместо этого он обходит конфигурации и пытается связаться со службой и получить ответ.

Системные аргументы Печать:

https.proxyHost=localhost, http.proxyPort=1212, http.proxyHost=localhost, https.proxyPort=1212

1 Ответ

0 голосов
/ 25 мая 2018

Чтобы Apache HttpClient использовал настройки прокси-сервера, переданные с использованием аргументов VM, вам нужно будет вызвать .useSystemProperties() при создании HTTP-клиента.

HttpClient defaultHttpClient = HttpClientBuilder.create()
.useSystemProperties()
.setDefaultRequestConfig(requestConfig)
.setConnectionManager(poolingHttpClientConnectionManager).build();
...