【问题标题】:What are the valid regular expression formats for the nonProxyHosts property in Java?Java 中 nonProxyHosts 属性的有效正则表达式格式是什么?
【发布时间】:2010-11-01 21:27:39
【问题描述】:

在 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

还有其他类型的模式吗?

谢谢!

【问题讨论】:

  • 我认为“正则表达式”是指“通配符”?这些例子在我看来根本不像RegEx

标签: java regex proxy


【解决方案1】:

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

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

编辑2:
一种快速的测试方法是使用:

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

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

【讨论】:

  • 快速方式 (Edit2) 就像一个魅力。您刚刚测试了返回到列表中的代理类型
【解决方案2】:

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

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

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

【讨论】:

  • 谢谢,但这就是我想要得到的定义。我可以在 IP 地址中使用通配符吗?我可以使用 CIDR 表示法吗?谢谢!
  • 我认为 CIDR 是不可能的,但您可以在 IP(当 IP 请求某些内容时)和主机名(当主机名请求某些内容时)使用通配符。
  • Link 在 2021 年给出 404
【解决方案3】:

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

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

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

【讨论】:

  • 出色的代码剖析。这几乎回答了这个问题,也回答了我的好奇心。
猜你喜欢
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
  • 2011-06-15
  • 2023-03-19
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
相关资源
最近更新 更多