Java RestTemplate 添加代理以及代理认证账号密码
代码如下:
public class RestTemplateProxyDemo {
public RestTemplate getRestTemplate() {
RestTemplate restTemplate = new RestTemplate();
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope(PROXY_HOST, PROXY_PORT),
new UsernamePasswordCredentials(PROXY_USER_NAME, PROXY_PASSWORD)
);
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
HttpHost proxy1 = new HttpHost(PROXY_HOST, PROXY_PORT);
httpClientBuilder.setProxy(proxy1).setDefaultCredentialsProvider(credsProvider).disableCookieManagement();
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(
httpClientBuilder.build()); // httpClient连接配置
restTemplate.setRequestFactory(clientHttpRequestFactory);
return restTemplate;
}
}
使用系统代理
上面的方法都可以设置当前连接的代理,下面要怎么在程序中自动使用系统代理呢?
对于 HttpURLConnection 类来说,程序不用做任何变动,它会默认使用系统代理。但是 HttpClient 默认是不使用系统代理的,如果想让它默认使用系统代理,可以通过 SystemDefaultRoutePlanner 和 ProxySelector 来设置。示例代码如下:
SystemDefaultRoutePlanner routePlanner = new SystemDefaultRoutePlanner(ProxySelector.getDefault());
CloseableHttpClient httpclient = HttpClients.custom()
.setRoutePlanner(routePlanner)
.build();
HttpGet request = new HttpGet(url);
CloseableHttpResponse response = httpclient.execute(request);