Apache HttpClient5 - 如何设置每个请求的 LocalAddress?

问题描述 投票:0回答:1

我正在将 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。

apache-httpcomponents apache-httpclient-5.x
1个回答
0
投票

不存在每个请求的本地地址之类的东西。这个不成立。本地地址只能在 HTTP 路由级别定义。

子类

DefaultRoutePlanner
并重写其
#determineLocalAddress
方法,以便为每个 HTTP 路由的本地地址解析提供自定义策略。

© www.soinside.com 2019 - 2024. All rights reserved.