首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为SOCKS代理设置nonProxyHosts?

如何为SOCKS代理设置nonProxyHosts?
EN

Stack Overflow用户
提问于 2014-08-22 19:24:55
回答 1查看 10.2K关注 0票数 20

我想为SOCKS5代理设置nonProxyHosts列表,即应该使用直接连接的主机名列表。

正如oracle docs所描述的,有名为http.nonProxyHostsftp.nonProxyHosts的选项来设置HTTP和FTP的代理排除,但没有针对SOCKS代理的特定设置。

我尝试过http.nonProxyHosts,但这并不影响SOCKS连接。

SOCKS代理是通过以下方式设置的:

代码语言:javascript
运行
复制
System.setProperty("socksProxyHost", "192.168.10.10");
System.setProperty("socksProxyPort", "3128");

但这会导致即使是到localhost的数据库连接也在使用SOCKS代理,这是不可接受的。

这应该如何使用呢?如何从代理连接中排除某些主机?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-01 14:45:18

使用socksNonProxyHosts系统属性;这是没有文档记录的,但是存在于Oracle JDK 8到11中,也可能存在于其他JDK中。

代码语言:javascript
运行
复制
java -DsocksProxyHost=mySocksServer -DsocksProxyPort=8888 -DsocksNonProxyHosts=127.0.0.1 [...]

TL;DR

sun.net.spi.DefaultProxySelector的源代码中可以找到属性socksNonProxyHosts (感谢@rince)

然而,Java网络属性的documentation暗示这并不存在,因此它的使用可能不稳定:

以这种方式指定SOCKS代理后,将尝试通过该代理建立所有

连接。

(已添加强调)

您也许能够使用Proxy和/或ProxySelector类,但是:

仅当您的应用程序使用connections.

  • Proxy建立URLConnection时,
  • ProxySelector才适用于任意套接字...但前提是您可以将Proxy对象作为参数提供给相关的Socket构造函数调用。(根据代码试图连接的内容,您可能需要逻辑来提供不同的Proxy对象。)

有一个bug for this RFE for this。这张罚单表明了另一种解决方法。显然,如果java.net.useSystemProxies属性为true,那么(在某些平台上)默认代理选择器将遵守在适当的系统代理设置中指定的排除主机。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25445875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档