Как добавить HTTP-прокси для клиента Jersey2

легко установить прокси для клиента на Jersey1.x:

config.getProperties().put(ApacheHttpClientConfig.PROPERTY_PROXY_URI, proxyUrl);

но как добавить HTTP-прокси для Jersey2.x клиент? Я проверил исходный код и не нашел реализации в:

org.в GlassFish.Джерси.клиент.HttpUrlConnector

спасибо!

5 ответов


спасибо @feuyeux, решение работает для меня, ps, код ниже работает в прокси с http basic auth:

    ClientConfig config = new ClientConfig();
    config.connectorProvider(new ApacheConnectorProvider());
    config.property(ClientProperties.PROXY_URI, proxy);
    config.property(ClientProperties.PROXY_USERNAME,user);
    config.property(ClientProperties.PROXY_PASSWORD,pass);
    Client client = JerseyClientBuilder.newClient(config);

надеюсь помочь другим


установить другой прокси во время выполнения не является хорошим решением. Соответственно, я использовал Apache connector для этого:

добавить Apache connector зависимость определена:

<dependency>
 <groupId>org.glassfish.jersey.connectors</groupId>
 <artifactId>jersey-apache-connector</artifactId>
</dependency>

добавить соединитель apache в клиент

config.property(ApacheClientProperties.PROXY_URI, proxyUrl); 
Connector connector = new ApacheConnector(config); 
config.connector(connector); 

Если вы используете http-соединитель jersey 2.0 по умолчанию(который является JDK Http (S)URLConnection). Вы можете просто настроить прокси-сервер, например:

    System.setProperty ("http.proxyHost", "proxy_server");
    System.setProperty ("http.proxyPort", "proxy_port");

для других реализаций http connector (Apache HTTP Client и Grizzly Asynchronous Client) я раньше не пробовал. Но я думаю,что вы могли бы следовать инструкции самим http connector.


это решение сработало для меня

пом.в XML

<dependency>
    <groupId>org.glassfish.jersey.connectors</groupId>
    <artifactId>jersey-apache-connector</artifactId>
    <version>2.17</version>
</dependency>

Java

ClientConfig config = new ClientConfig();
config.property( ClientProperties.PROXY_URI, "http://_YOUR_URI_:_YOUR_PORT_" );
config.connectorProvider( new ApacheConnectorProvider() );
Client client = ClientBuilder.newClient( config );

надеюсь, что это поможет:)


альтернатива без include jersey-apache-connector

public class Sample {

  public static void main(String[] args) {

    // you can skip AUTH filter if not required
    ClientConfig config = new ClientConfig(new SampleProxyAuthFilter());
    config.connectorProvider(
        new HttpUrlConnectorProvider().connectionFactory(new SampleConnectionFactory()));

    Client client = ClientBuilder.newClient(config);

    // there you go
  }
}

class SampleConnectionFactory implements HttpUrlConnectorProvider.ConnectionFactory {
  @Override
  public HttpURLConnection getConnection(URL url) throws IOException {
    return (HttpURLConnection) url
        .openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress("host", 8080)));
  }
}

class SampleProxyAuthFilter implements ClientRequestFilter {

  @Override
  public void filter(ClientRequestContext requestContext) throws IOException {
    requestContext.getHeaders().add("Proxy-Authorization", "authentication");
  }
}