从没有子域的URL获取域的正确方法是什么?
在Java中,您可以从字符串中创建一个新URL(urlString)并在URL上调用getHost(),但是您有子域名。
问题是因为可能有以下主机: subhost.example.com 和 subhost.example.co.uk
这两个部分领域还有其他几个领域,如co.uk(请参阅https://wiki.mozilla.org/TLD_List上的列表)。
在我看来,只获取域名的唯一正确方法是搜索TLD列表,从主机末尾删除TLD,并在主机的最后一段时间之前取走所有内容。是否有现成的方法可以做到这一点?我没有在java.net.URL中看到一个,我检查了一些apache公共但在那里找不到。
答案 0 :(得分:16)
我知道这已经晚了几年但如果有人偶然发现这个问题,请尝试以下方法:
InternetDomainName.from("subhost.example.co.uk").topPrivateDomain().name
以上将返回example.co.uk。
答案 1 :(得分:0)
不确定以上答案是否正确:
InternetDomainName.from("test.blogspot.com").topPrivateDomain() -> test.blogspot.com
这对我来说效果更好:
InternetDomainName.from("test.blogspot.com").topDomainUnderRegistrySuffix() -> blogspot.com
详细信息: https://github.com/google/guava/wiki/InternetDomainNameExplained
答案 2 :(得分:0)
以上解决方案需要你添加Guava。如果你使用 OkHttp 或 Retrofit,你也可以使用
PublicSuffixDatabase.get().getEffectiveTldPlusOne("test.blogspot.com")
这给你blogspot.com