如何为SOCKS代理设置nonProxyHosts

unw*_*ich 13 java proxy localhost socks

我想设置nonProxyHostsSOCKS5代理的列表,即应该使用直接连接的主机名列表.

正如oracle文档描述的那样,有一些选项可以命名http.nonProxyHostsftp.nonProxyHosts为HTTP和FTP设置代理排除,但SOCKS代理没有特定的设置.

我试过http.nonProxyHosts,但这不会影响SOCKS连接.

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

System.setProperty("socksProxyHost", "192.168.10.10");
System.setProperty("socksProxyPort", "3128");
Run Code Online (Sandbox Code Playgroud)

但这导致甚至数据库连接localhost都使用SOCKS代理,这是不可接受的.

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

Ste*_*n C 14

Java网络属性的文档说明了这一点:

以这种方式指定SOCKS代理后,将通过代理尝试所有 TCP连接.

(重点补充)

没有通过socks属性设置非代理主机的规定.


您可以使用Proxy和/或ProxySelector类,但是:

  • ProxySelector仅适用于您的应用程序用于URLConnection建立连接的情况.

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


这方面有一个出色的RFE:http://bugs.java.com/bugdatabase/view_bug.do? bug_id= 5001942

该票证明了另一种解决方法.显然,如果java.net.useSystemProxies属性是true,则(在某些平台上)默认代理选择器将遵循在适当的系统代理设置中指定的排除主机.

  • 该错误未命名实际属性,您必须在源代码中查找DefaultProxySelector。该属性是socksNonProxyHosts (2认同)