web-dev-qa-db-fra.com

Comment ajouter un proxy http pour le client Jersey2

Il est facile de définir un proxy pour le client sur Jersey1.x:

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

Mais comment ajouter un proxy http pour le client Jersey2.x? J'ai vérifié le code source et n'ai pas trouvé que l'implémentation le faisait dans:

org.glassfish.jersey.client.HttpUrlConnector

Merci!

15
feuyeux

Définir un proxy différent à l'exécution n'est pas une bonne solution. En conséquence, j'ai utilisé le connecteur Apache pour le faire: 

ajouter la dépendance du connecteur Apache définie:

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

ajouter un connecteur Apache au client

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

merci @feuyeux, la solution est travail pour moi, ps, le code ci-dessous est fonctionne dans le proxy avec 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);

espère aider les autres

18
NGloom

Si vous utilisez le connecteur http par défaut du maillot 2.0 (qui correspond à JLK Http (URLConnection)). Vous pouvez simplement configurer le proxy de la manière suivante:

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

Pour d'autres implémentations du connecteur http (Apache HTTP Client et Grizzly Asynchronous Client), je n'avais jamais essayé auparavant. Mais je pense que vous pourriez suivre les instructions du connecteur http lui-même. 

7
Lifecube

Cette solution a fonctionné pour moi

pom.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 );

J'espère que cela pourra aider :)

2
Halayem Anis

Une alternative sans 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");
  }
}
0
keshin