Настройка прокси-сервера не работает с Spring WebClientJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Настройка прокси-сервера не работает с Spring WebClient

Сообщение Anonymous »

Мой следующий веб-клиент работает нормально при подключении к Интернету, но не через прокси-соединение.

Код: Выделить всё

WebClient webClient = WebClient.builder()
.baseUrl("https://targetsite.com")
.build();

webClient.post()
.uri("/service/serviceName")
.body(BodyInserters.fromObject(reqData))
.retrieve()
.bodyToMono(WebServiceResponse.class)

Однако тот же клиент работает через прокси, если я настрою его, как указано ниже,

Код: Выделить всё

HttpClient httpClient = HttpClient.create()
.tcpConfiguration(tcpClient -> tcpClient
.proxy(proxy -> proxy
.type(ProxyProvider.Proxy.HTTP)
.host("ourproxy.com")
.port(8080)));

ReactorClientHttpConnector connector = new ReactorClientHttpConnector(httpClient);

WebClient webClient = WebClient.builder()
.clientConnector(connector)
.baseUrl("https://targetsite.com")
.build();

webClient.post()
.uri("/service/serviceName")
.body(BodyInserters.fromObject(reqData))
.retrieve()
.bodyToMono(WebServiceResponse.class)
Но если я установлю те же данные прокси-сервера, используя System.setProperty("http.proxyHost","ourproxy.com");

Код: Выделить всё

System.setProperty("http.proxyPort","8080");
или
Аргументы времени выполнения JVM -Dhttp.proxyHost=ourproxy.com -Dhttp.proxyPort=8080

Код: Выделить всё

WebClient webClient = WebClient.builder()
.baseUrl("https://targetsite.com")
.build();

System.setProperty("http.proxyHost", "ourproxy.com");
System.setProperty("http.proxyPort", "8080");

webClient.post()
.uri("/service/serviceName")
.body(BodyInserters.fromObject(reqData))
.retrieve()
.bodyToMono(WebServiceResponse.class)

Вызовы завершаются неудачно с UnknownHostException, например,

Код: Выделить всё

[04/11/2019 12:32:43.031 IST] DEBUG [reactor-http-epoll-3] [PooledConnectionProvider:254] - Creating new client pool [http] for targetsite.com:443
[04/11/2019 12:32:43.033 IST] DEBUG [reactor-http-epoll-3] [PooledConnectionProvider:254] - [id: 0xe4a0dc15] Created new pooled channel, now 0 active connections and 1 inactive connections
[04/11/2019 12:32:43.045 IST] DEBUG [reactor-http-epoll-3] [SslProvider:254] - [id: 0xe4a0dc15] SSL enabled using engine SSLEngineImpl and SNI targetsite.com:443
[04/11/2019 12:32:43.046 IST] DEBUG [reactor-http-epoll-3] [BootstrapHandlers:254] - [id: 0xe4a0dc15] Initialized pipeline DefaultChannelPipeline{(reactor.left.sslHandler = io.netty.handler.ssl.SslHandler), (reactor.left.sslReader = reactor.netty.tcp.SslProvider$SslReadHandler), (BootstrapHandlers$BootstrapInitializerHandler#0 = reactor.netty.channel.BootstrapHandlers$BootstrapInitializerHandler), (SimpleChannelPool$1#0 = io.netty.channel.pool.SimpleChannelPool$1), (reactor.left.httpCodec = io.netty.handler.codec.http.HttpClientCodec), (reactor.left.decompressor = io.netty.handler.codec.http.HttpContentDecompressor), (reactor.right.reactiveBridge = reactor.netty.channel.ChannelOperationsHandler)}
[04/11/2019 12:32:43.165 IST] ERROR [reactor-http-epoll-2] [AbstractErrorWebExceptionHandler:117] - [13ebf1eb] 500 Server Error for HTTP POST "/service/serviceName"
java.net.UnknownHostException: targetsite.com: Name or service not known
Пожалуйста, помогите, почему мой код не работает, если я устанавливаю детали прокси через аргументы времени выполнения JVM или свойства системы.

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

Подробнее здесь: https://stackoverflow.com/questions/586 ... -webclient
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»