我有一个在JVM/Tomcat上运行的应用程序,它运行的机器都启用了IPv6堆栈。我正在尝试向另一台只支持IPv4的机器发出请求,而JVM总是更喜欢使用IPv6堆栈发出该请求(我使用Apache HttpClient类发出请求)。
我知道-Djava.net.preferIPv4Stack=true属性,但是由于我不会在这里讨论的原因,我不能在启动时传递它。我甚至不能以编程方式(在短时间内)这样设置它:
System.setProperty("java.net.preferIPv4Stack", "true");...since这可能会影响运行在JVM/Tomcat实例上的其他线程(正如我从this question和其他人那里理解的那样)。
所以问题是,我如何让这个请求通过IPv4堆栈(这意味着实际使用IPv4接口,而不仅仅是连接到IPv4端点)?
我考虑过使用cURL (通过exec或通过libcurl绑定),因为curl根本不使用JVM。
还有其他想法吗?
发布于 2013-05-22 21:18:56
柔版提到这是有效的!
最终,我意识到真正的问题不是JVM会从IPv6接口发出请求,这是不可能的,因为代理只有一个as条目(正如Flexo指出的那样)。
真正的问题是代理URL中的一个拼写错误,这使得JVM无法解析代理主机;让我大吃一惊的是异常是从Inet6Address类抛出的(可能是因为JVM还不知道代理只有IPv4 )。
我修正了打字错误!现在,代理已被正确解析,并通过IPv4发出请求。谢谢!
https://stackoverflow.com/questions/16662896
复制相似问题