Java中的nonProxyHosts属性的有效正则表达式格式是什么?

Joe*_*nte 5 java regex proxy

当使用proxyHost,proxyPortnonProxyHosts在Java属性修改URL连接,什么是通配符的有效用途nonProxyHosts性质?我能做以下任何一项或全部吗?

  1. 显式服务器名称: nonProxyHosts=server.company.com
  2. 子域中的任何服务器: nonProxyHosts=*.local.company.com
  3. 特定服务器的IP地址: nonProxyHosts=192.168.101.110
  4. 子网中的任何服务器: nonProxyHosts=192.168.101.*
  5. 子网中的任何服务器: nonProxyHosts=192.168.101/23

还有其他类型的模式吗?

谢谢!

use*_*784 8

查看sun.net.spi.DefaultProxySelectorsun.misc.Regexp类的 OpenJDK 源代码。nonProxyHostsSun JVM 的系统属性在那里进行处理。根据@authorjavadoc 注释,Regexp 类是由 Java 人 James Gosling 本人编写的。它所做的只是匹配*字符串中任何位置的正则表达式(开始、中间和结束)。因此,您可以执行部分​​主机名以及部分 IP 地址,例如host12*10.*来匹配以 开头的所有主机名host12或以 开头的所有 IP 10.。此外,DefaultProxySelector检测代理 URL 中的localhost和并自动排除它们。因此,就 Sun JVM 而言,127.0.0.1您不需要将它们添加到您的系统中。nonProxyHosts

现在,在 Weblogic 中,它们似乎拥有自己的weblogic.net类,这些类使用相同的 Sun 系统网络属性进行操作,但并不总是以相同的方式进行操作。我手头没有 Weblogic 源代码,但我的观点是,不仅仅是 Sun JDK 使用这些属性。由于错误或不同的语义或 Sun 行为和文档的解释,YMMV 具有不同的代理实现。

我引用的 OpenJDK 源版本来自http://download.java.net/openjdk/jdk6/上的 openjdk-6 。


the*_*ejh 5

http://download.oracle.com/javase/1.4.2/docs/guide/net/properties.html说:

http.nonProxyHosts 表示应该直接连接而不是通过代理服务器连接的主机。该值可以是主机列表,每个主机由 | 分隔 ,此外,通配符 (*) 可用于匹配. 例如:

-Dhttp.nonProxyHosts="*.foo.com|localhost"。


ksc*_*eid 5

我认为对属性值的解释是它定义了一个正则表达式池。如果主机匹配池中的任何表达式(主机和表达式都被强制为小写),则不使用代理。

编辑:
或者不完全。它看起来sun.misc.RegexpPool只处理以“*”开头或结尾的字符串。所以我想这真的归结为只是前缀和后缀通配符......

Edit2:
一种快速测试方法是使用:

ProxySelector.getDefault().select(URI.create("...myURI..."));
Run Code Online (Sandbox Code Playgroud)

哪个会返回List<Proxy>。默认代理选择器是sun.net.spi.DefaultProxySelector,但它可以被覆盖。