InternetDomainName 和 publicsuffix 列表
InternetDomainName and publicsuffix list
Guava 21 InternetDomainName API 使用哪个版本的 public 后缀列表(https://publicsuffix.org/)?
解析 keyupgrade.spaceforupdate.download
结果
scala> InternetDomainName.from("keyupgrade.spaceforupdate.download").topPrivateDomain
java.lang.IllegalStateException: Not under a public suffix: keyupgrade.spaceforupdate.download
at com.google.common.base.Preconditions.checkState(Preconditions.java:176)
at com.google.common.net.InternetDomainName.topPrivateDomain(InternetDomainName.java:445)
... 50 elided
但是根据 https://publicsuffix.org/list/public_suffix_list.dat,.download 是一个有效的 public 后缀。
我认为 Guava 21 使用的是旧版本的 public 后缀列表。有没有办法更新它?谢谢!
我是 InternetDomainName 的主要维护者。抱歉,您遇到了问题。
Guava 21 中包含的 PSL 版本似乎是在 2016 年 11 月 30 日从 Mozilla 获得的。不幸的是,没有直接的方法可以自行更新它。
话虽如此,我只是回顾了旧版本的 PSL,"download" 已经存在了很长时间,远早于 Guava 21 中使用的版本。你介意发布一些工作吗演示您遇到的问题的示例代码?
这个对话在番石榴邮件列表和这里同时进行;我会在这里巩固它。在邮件列表的最新回复中,Neera 回应了我对示例代码的请求,内容如下:
I am trying to parse "keyupgrade.spaceforupdate.download" where
.download is a valid TLD as per the latest mozilla public suffix
list, but Guava fails to parse it.
scala>
InternetDomainName.from("keyupgrade.spaceforupdate.download").topPrivateDomain
java.lang.IllegalStateException: Not under a public suffix:
keyupgrade.spaceforupdate.download at
com.google.common.base.Preconditions.checkState(Preconditions.java:176)
at
com.google.common.net.InternetDomainName.topPrivateDomain(InternetDomainName.java:445)
... 50 elided
我想知道这是否是特定于 Scala 的问题。正如我所提到的,'download' 已经在 PSL 中存在很长时间了(根据 PSL 本身,自 2014 年 11 月 20 日起),并且它在用于构建 Guava 的 PSL 的本地副本中存在多年,版本 21 之前被建。请注意,我在 Java 中针对我们的 head 版本进行了测试,并获得了预期的输出,"spaceforupdate.download":
public static void main(String[] args) {
InternetDomainName top =
InternetDomainName.from("keyupgrade.spaceforupdate.download").topPrivateDomain();
System.out.println(top);
}
带有 "obvious" 后缀的测试有效吗?例如,"www.google.com" 的顶级私有域应该是 "google.com"。请尝试一下,如果可能的话,请尝试在 Java 而不是 Scala 中进行测试。我期待听到这些测试的进展情况。
我很确定您有一个 Guava v14 jar on your classpath, possibly in addition to 您认为正在使用的 v21 jar。它于 2013 年发布,在 .download
显然被添加为 TLD 之前。
查看您的堆栈跟踪,它表明异常是从 Preconditions.java
的第 176 行抛出的,但在 v21 that line is just a */
. Stepping backwards it's not until v17 中行号有意义。
与 InternetDomainName
相同的问题 - 比较 v21 vs. v14 (Preconditions
also lines up in v14)。
所以仔细看看你的类路径,我认为这是你的问题。
编辑:确认这在 v21 和 Scala 中有效:
$ scala -cp guava-21.0.jar
Welcome to Scala 2.11.11 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_131).
Type in expressions for evaluation. Or try :help.
scala> import com.google.common.net._
import com.google.common.net._
scala> InternetDomainName.from("keyupgrade.spaceforupdate.download").topPrivateDomain
res0: com.google.common.net.InternetDomainName = spaceforupdate.download
Guava 21 InternetDomainName API 使用哪个版本的 public 后缀列表(https://publicsuffix.org/)?
解析 keyupgrade.spaceforupdate.download
结果
scala> InternetDomainName.from("keyupgrade.spaceforupdate.download").topPrivateDomain
java.lang.IllegalStateException: Not under a public suffix: keyupgrade.spaceforupdate.download
at com.google.common.base.Preconditions.checkState(Preconditions.java:176)
at com.google.common.net.InternetDomainName.topPrivateDomain(InternetDomainName.java:445)
... 50 elided
但是根据 https://publicsuffix.org/list/public_suffix_list.dat,.download 是一个有效的 public 后缀。 我认为 Guava 21 使用的是旧版本的 public 后缀列表。有没有办法更新它?谢谢!
我是 InternetDomainName 的主要维护者。抱歉,您遇到了问题。
Guava 21 中包含的 PSL 版本似乎是在 2016 年 11 月 30 日从 Mozilla 获得的。不幸的是,没有直接的方法可以自行更新它。
话虽如此,我只是回顾了旧版本的 PSL,"download" 已经存在了很长时间,远早于 Guava 21 中使用的版本。你介意发布一些工作吗演示您遇到的问题的示例代码?
这个对话在番石榴邮件列表和这里同时进行;我会在这里巩固它。在邮件列表的最新回复中,Neera 回应了我对示例代码的请求,内容如下:
I am trying to parse "keyupgrade.spaceforupdate.download" where .download is a valid TLD as per the latest mozilla public suffix list, but Guava fails to parse it.
scala> InternetDomainName.from("keyupgrade.spaceforupdate.download").topPrivateDomain java.lang.IllegalStateException: Not under a public suffix: keyupgrade.spaceforupdate.download at com.google.common.base.Preconditions.checkState(Preconditions.java:176) at com.google.common.net.InternetDomainName.topPrivateDomain(InternetDomainName.java:445) ... 50 elided
我想知道这是否是特定于 Scala 的问题。正如我所提到的,'download' 已经在 PSL 中存在很长时间了(根据 PSL 本身,自 2014 年 11 月 20 日起),并且它在用于构建 Guava 的 PSL 的本地副本中存在多年,版本 21 之前被建。请注意,我在 Java 中针对我们的 head 版本进行了测试,并获得了预期的输出,"spaceforupdate.download":
public static void main(String[] args) {
InternetDomainName top =
InternetDomainName.from("keyupgrade.spaceforupdate.download").topPrivateDomain();
System.out.println(top);
}
带有 "obvious" 后缀的测试有效吗?例如,"www.google.com" 的顶级私有域应该是 "google.com"。请尝试一下,如果可能的话,请尝试在 Java 而不是 Scala 中进行测试。我期待听到这些测试的进展情况。
我很确定您有一个 Guava v14 jar on your classpath, possibly in addition to 您认为正在使用的 v21 jar。它于 2013 年发布,在 .download
显然被添加为 TLD 之前。
查看您的堆栈跟踪,它表明异常是从 Preconditions.java
的第 176 行抛出的,但在 v21 that line is just a */
. Stepping backwards it's not until v17 中行号有意义。
与 InternetDomainName
相同的问题 - 比较 v21 vs. v14 (Preconditions
also lines up in v14)。
所以仔细看看你的类路径,我认为这是你的问题。
编辑:确认这在 v21 和 Scala 中有效:
$ scala -cp guava-21.0.jar
Welcome to Scala 2.11.11 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_131).
Type in expressions for evaluation. Or try :help.
scala> import com.google.common.net._
import com.google.common.net._
scala> InternetDomainName.from("keyupgrade.spaceforupdate.download").topPrivateDomain
res0: com.google.common.net.InternetDomainName = spaceforupdate.download