文中基于apache的httpclient 4.5.2,代理服务器有用户名密码鉴权。
首先,对于鉴权,我们需要设置身份认证,并通过配置的身份认证信息来创建一个httpclient;
接下来需要创建一个代理,并设置到请求信息中;
最后是执行请求。
代码如下:
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope(代理IP, 代理port),
new UsernamePasswordCredentials(鉴权用户名, 鉴权密码));
CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
HttpHost proxy = new HttpHost(代理IP, 代理port);
RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
HttpPost req = new HttpPost(目标URL);// GET请求用HttpGet
req.setConfig(config);
CloseableHttpResponse resp = client.execute(req);
try {
System.out.println(resp);
} finally {
resp.close();
}
在测试中笔者犯了几个很低级的错误,首先目标URL不能是localhost/127.0.0.1,因为这样其实代理服务器请求的是自己,但是因为代理服务器本地并没有部署对应服务,所以会返回失败,笔者这里返回的是503错误。另一个是因为笔者请求的代理是部署在公有云上的,如果使用的是内网IP也是不行的,因为根本找不到那个IP,所以使用前要确认代理是部署在哪的。
参考文献:
https://blog.csdn.net/ktlifeng/article/details/51099370
https://blog.csdn.net/zhangbin666/article/details/78351096?locationNum=4&fps=1