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

时间:2010-11-01 21:27:39

标签: java regex proxy

在Java中使用proxyHostproxyPortnonProxyHosts属性修改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
  6. 是否有其他类型的模式?

    谢谢!

3 个答案:

答案 0 :(得分:4)

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

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

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

ProxySelector.getDefault().select(URI.create("...myURI..."));

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

答案 1 :(得分:2)

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

  

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

     

-Dhttp.nonProxyHosts = “* foo.com |。本地主机”。

答案 2 :(得分:1)

查看sun.net.spi.DefaultProxySelectorsun.misc.Regexp类的OpenJDK源代码。在那里为Sun JVM处理nonProxyHosts System属性。根据{{​​1}} javadoc评论,Regexp类是由Java人本人James Gosling编写的。它所做的只是匹配@author正则表达式,在字符串中的任何位置(开始,中间和结束)。因此,您可以执行部分​​主机名以及部分IP地址,例如*host12*,以匹配以10.*开头的所有主机名或以host12开头的所有IP。此外,10.会在代理网址中检测到DefaultProxySelectorlocalhost,并自动将其排除在外。因此,就Sun JVM而言,您无需将这些内容添加到127.0.0.1

现在,在Weblogic中,它们似乎有自己的nonProxyHosts类,这些类使用相同的Sun System网络属性,但并不总是以相同的方式运行。我没有方便的Weblogic源,但我的观点是,不只是Sun JDK使用这些属性。由于存在错误或不同的语义或对Sun行为和文档的解释,YMMV具有不同的代理实现。

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