我正在将 Apache httpclient 从 4.5 迁移到 5.3,我的应用程序当前从一组本地 IP 中动态选择。
示例代码:
HttpGet request = new HttpGet(url);
request.setRequestConfig(RequestConfig.custom()
.setLocalAddress(someLocalInetAddress)
.build());
在 httpclient 5.x 中,setLocalAddress() 已被删除,我需要一种新的方法来分配本地地址。
我知道我可以在 ConnectionManager 级别创建 ConnectionSocketFactory 但这对我不起作用,因为它需要显式配置何时使用每个 IP(据我所知)。 我有一些其他逻辑来确定 IP,我只需为请求设置它即可。
更新:
我发现的一个“黑客”是创建一个自定义 HttpContext 并像这样传递它
//create a new HttpRoute route and set its local address
final HttpContext context = HttpClientContext.create();
context.setAttribute(HTTP_ROUTE, httpRoute);
client.execute(request, context, handler);
这样做的问题是它覆盖了整个默认的 httpRoute,而不仅仅是 localAddress。
不存在每个请求的本地地址之类的东西。这个不成立。本地地址只能在 HTTP 路由级别定义。
子类
DefaultRoutePlanner
并重写其 #determineLocalAddress
方法,以便为每个 HTTP 路由的本地地址解析提供自定义策略。