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!
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);
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
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.
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 :)
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");
}
}