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

在 Java 中使用proxyHost、proxyPort 和nonProxyHosts 属性修改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.DefaultProxySelector 和 sun.misc.Regexp 类的 OpenJDK 源代码。 nonProxyHosts System 属性在那里为 Sun JVM 处理。 Regexp 类是由 Java 人 James Gosling 本人根据@author javadoc 注释编写的。它所做的只是匹配* 正则表达式,在字符串中的任何位置(开始、中间和结束)。因此,您可以使用部分主机名和部分 IP 地址,例如 host12* 或 10.* 来匹配以 host12 开头的所有主机名或以 10. 开头的所有 IP。此外,DefaultProxySelector 在代理 URL 中检测到 localhost 和 127.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
相关资源
最近更新 更多