J'essaie de faire REST appels avec Spring. Si je comprends bien, la bonne façon de faire est d'utiliser RestTemplate
(?). Le problème est que je suis derrière un proxy .
Voici mon code en ce moment:
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
InetSocketAddress address = new InetSocketAddress(Host, 3128);
Proxy proxy = new Proxy(Proxy.Type.HTTP, address);
factory.setProxy(proxy);
RestTemplate restTemplate = new RestTemplate();
restTemplate.setRequestFactory(factory);
Semble fonctionner, mais je dois m'authentifier auprès du proxy, mais comment cela se fait-il? Le type Proxy
ainsi que le type SimpleClientHttpRequestFactory
ne semblent pas gérer les informations d'identification. Sans informations d'identification, je reçois seulement 407 ...
Après un certain nombre d'options différentes, j'ai opté pour le code ci-dessous en raison de la possibilité de définir le proxy du RestTemplate à la création afin de pouvoir le refactoriser dans une méthode distincte. Juste pour noter qu'il a également une dépendance supplémentaire, alors gardez cela à l'esprit.
private RestTemplate createRestTemplate() throws Exception {
final String username = "myusername";
final String password = "myPass";
final String proxyUrl = "proxy.nyc.bigtower.com";
final int port = 8080;
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope(proxyUrl, port),
new UsernamePasswordCredentials(username, password));
HttpHost myProxy = new HttpHost(proxyUrl, port);
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
clientBuilder.setProxy(myProxy).setDefaultCredentialsProvider(credsProvider).disableCookieManagement();
HttpClient httpClient = clientBuilder.build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setHttpClient(httpClient);
return new RestTemplate(factory);
}
// Dépendances que j'ai utilisées.
<dependency>
<groupId>org.Apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
le code ci-dessous a fonctionné pour moi.
RestTemplate restTemplate = new RestTemplate();
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials( new AuthScope("proxyHost", "proxyPort"), new UsernamePasswordCredentials("proxyUser", "proxyPass") );
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
clientBuilder.useSystemProperties();
clientBuilder.setProxy(new HttpHost("proxyHost", "proxyPort"));
clientBuilder.setDefaultCredentialsProvider(credsProvider);
clientBuilder.setProxyAuthenticationStrategy(new ProxyAuthenticationStrategy());
CloseableHttpClient client = clientBuilder.build();
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setHttpClient(client);
restTemplate.setRequestFactory(factory);