使用 Spring WebClient 通过特定网络接口发送 http 请求
Send an http request through a specific network interface using Spring WebClient
我正在使用 Spring WebClient,我需要通过特定的 NIC 发送我的请求(典型情况是同一台计算机上有两个网络适配器)。
看了文档没用,源码好像有点复杂。我该怎么做?
目前(2017 年 6 月)这个问题没有很好的解决方案。在内部,API 存在但不暴露给外部世界。
唯一可行的解决方案是通过反射。基本上,你需要拦截reactor HttpClient的创建,那时:
- 从 HttpClient 实例的 "options" 字段收集 HttpClientOptions 对象
- 从 HttpClientoptions 实例的 "bootstrapTemplate" 字段收集 Bootstrap 对象
- 使用 Bootstrap 实例的 "localAddress" 方法设置所需的本地地址
希望这可能对某些人有所帮助,因为我花了好几个小时调试才理解流程。您可以查看示例 here,我们在其中实现了此行为。很难过,但这是目前唯一的办法。
以后请不要对这个答案投反对票,届时 API 将被公开。
我正在使用 Spring WebClient,我需要通过特定的 NIC 发送我的请求(典型情况是同一台计算机上有两个网络适配器)。
看了文档没用,源码好像有点复杂。我该怎么做?
目前(2017 年 6 月)这个问题没有很好的解决方案。在内部,API 存在但不暴露给外部世界。
唯一可行的解决方案是通过反射。基本上,你需要拦截reactor HttpClient的创建,那时:
- 从 HttpClient 实例的 "options" 字段收集 HttpClientOptions 对象
- 从 HttpClientoptions 实例的 "bootstrapTemplate" 字段收集 Bootstrap 对象
- 使用 Bootstrap 实例的 "localAddress" 方法设置所需的本地地址
希望这可能对某些人有所帮助,因为我花了好几个小时调试才理解流程。您可以查看示例 here,我们在其中实现了此行为。很难过,但这是目前唯一的办法。
以后请不要对这个答案投反对票,届时 API 将被公开。