How to set nonProxyHosts for a SOCKS proxy?

前端 未结 1 1598
自闭症患者
自闭症患者 2021-02-05 11:13

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

1条回答
  •  你的背包
    2021-02-05 11:35

    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.

    0 讨论(0)
提交回复
热议问题