温馨提示:
1. 此样例同时支持访问http和https网页
2. 使用用户名密码访问的情况下,每次请求httpclient会发送两次进行认证从而导致请求耗时增加,建议使用终端IP授权访问
参考样例
import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.ProxyAuthenticationStrategy; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; public class TestProxyRestTemplate { // 目标网站 private static String pageUrl = "https://example.com"; // 代理服务器IP、端口号 private static String proxyHost = "159.138.141.125"; private static Integer proxyPort = 18916; // 用户名密码授权 private static String ProxyUser = "username"; private static String Proxypass = "password"; public static void main(String[] args) { CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials( new AuthScope(proxyHost, proxyPort), new UsernamePasswordCredentials(ProxyUser, Proxypass) ); HttpHost proxy = new HttpHost(proxyHost, proxyPort); HttpClientBuilder clientBuilder = HttpClientBuilder.create(); clientBuilder.useSystemProperties(); clientBuilder.setProxy(proxy); clientBuilder.setDefaultCredentialsProvider(credsProvider); clientBuilder.setProxyAuthenticationStrategy(new ProxyAuthenticationStrategy()); CloseableHttpClient client = clientBuilder.build(); HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); factory.setHttpClient(client); RestTemplate restTemplate = new RestTemplate(); restTemplate.setRequestFactory(factory); String result = restTemplate.getForObject(pageUrl, String.class); System.out.println(result); } }