当我的客户端计算机上有多个 NIC 时,如何将(当然是出站)HttpUrlConnection 绑定到特定的本地 IP 地址?

And*_*eaG 5 java networking http

我有一种 Http-Gateway 应用程序,它充当本地网络外部服务器的 http 客户端。

将进行网络配置升级,并且我将遇到问题,因为:
- 客户端计算机上有多个网卡
- 防火墙/nat 规则使用硬连线 IP 地址

如果我可以通过编程强制 HttpUrlConnection 对象使用特定的 IP 地址,那就没问题了。但恐怕做不到。

我对吗?如果不支持,哪个版本的 JRE 支持?

其他可能的解决方案,最好是不涉及从头开始重写所有内容的解决方案?
越简单越好:我知道,有 Apache HttpClient,或者我可以使用 Sockets...

谢谢

ZZ *_*der 5

你不能。HttpURLConnection 不提供任何操作套接字的接口。

你也不应该这样做。接口的选择基于路由决策。如果您必须手动选择网卡才能到达目的地,那么您的所有互联网连接都会遇到同样的问题。您应该在操作系统中添加静态路由,以确保目的地使用正确的接口。


mon*_*tty 3

我看不出有什么好的解决方案,但有两种可能:

  1. 本地代理连接:

    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(
            "proxy", 5555));
    URLConnection urlConnection = url.openConnection(proxy);
    
    Run Code Online (Sandbox Code Playgroud)
  2. URLStreamHandlerFactory使用注册自定义java.net.URL。每当openConnection()调用它时,URL它都会由这个注册的自定义工厂处理,使您可以控制套接字连接的详细信息。是使用 Apache 的实现还是自己开发?

    Url.setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
    
    Run Code Online (Sandbox Code Playgroud)