I want to set the nonProxyHosts
list for a SOCKS5 proxy, i.e. the list of hostnames to which a direct connection should be used.
As the oracle docs describe
Use the socksNonProxyHosts
system property; this is undocumented, but exists in Oracle JDKs 8 thru 11, and probably others too.
java -DsocksProxyHost=mySocksServer -DsocksProxyPort=8888 -DsocksNonProxyHosts=127.0.0.1 [...]
TL;DR
The property socksNonProxyHosts
is found in the source code for sun.net.spi.DefaultProxySelector (thanks to @rince)
However, the documentation for the Java networking properties implies this doesn't exist, so its use may be unstable:
Once a SOCKS proxy is specified in this manner, all TCP connections will be attempted through the proxy.
(Emphasis added)
You might be able to use the Proxy
and/or ProxySelector
classes, but:
ProxySelector
is only applicable if your application uses URLConnection
to establish connections.
Proxy
is applicable for arbitrary sockets ... but only if you can supply the Proxy
object as a parameter to the relevant Socket
constructor calls. (And you would need logic to supply different Proxy
objects depending on what your code is trying to connect to.)
There's a bug for this RFE for this. The ticket suggests another workaround. Apparently, if the java.net.useSystemProxies
property is true
, then (on some platforms) the default proxy selector will respect exclude hosts specified in the appropriate system proxy settings.