Spring RestTemplate和Proxy Auth

我正在尝试用Spring进行REST调用。 据我所知,正确的方法是使用RestTemplate (?)。 问题是,我是一个代理人。

这是我现在的代码:

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

似乎工作,但我需要在代理validation,但这是如何完成的? Proxy类型以及SimpleClientHttpRequestFactory类型似乎不处理凭据。 没有凭据,我只得到407 ……

经过以下几个不同的选项后,由于能够在创建时为RestTemplate设置代理,因此我决定使用下面的代码,这样我就可以将它重构为一个单独的方法。 只是要注意它还有一个额外的依赖,所以请记住。

  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); } 

//我使用的依赖项

   org.apache.httpcomponents httpclient 4.5.2   org.springframework spring-web 4.2.5.RELEASE  

下面的代码对我有用。

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