文中基于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
本文介绍如何在Apache HttpClient 4.5.2中配置带用户名密码鉴权的代理服务器。通过设置身份认证信息创建HttpClient,再创建代理并设置到请求中。文章还分享了实践中的常见错误,如避免使用localhost作为目标URL以及确认代理服务器部署位置。

1010

被折叠的 条评论
为什么被折叠?



