从 URL 获取不带子域的域

发布于 2024-09-08 22:09:43 字数 462 浏览 3 评论 0原文

从没有子域的 URL 获取域的正确方法是什么?

在 Java 中,您可以从字符串创建一个新的 URL(urlString) 并在该 URL 上调用 getHost(),但您可以使用它的子域。

问题是因为可能有这样的主机: 子主机.example.com 和 subhost.example.co.uk

这两个部分的域名中还有其他几个,例如 co.uk(请参阅 https 上的列表: //wiki.mozilla.org/TLD_List)。

在我看来,仅获取域名的唯一正确方法是通过 TLD 列表进行搜索,从主机末尾删除 TLD,并删除主机中最后一个句点之前的所有内容。是否有现有的方法可以做到这一点?我在 java.net.URL 中没有看到一个,我检查了一点 apache commons 但在那里找不到一个。

What is the proper way to get the domain from a URL without the subdomains?

In Java, from a string you can make a new URL(urlString) and call getHost() on the URL, but you have subdomains with it.

The problem is because there can be hosts like:
subhost.example.com
and
subhost.example.co.uk

There are several other of these two part domains like co.uk (see the list on https://wiki.mozilla.org/TLD_List).

It seems to me the only correct way to get only the domain is to do a search through the TLD list, remove the TLD from the end of the host, and take away everything before the last period in the host. Is there an existing method that does this? I didn't see one in java.net.URL, and I checked apache commons a bit but couldn't find one there.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

ぺ禁宫浮华殁 2024-09-15 22:09:43

我知道这已经晚了几年,但如果有人偶然发现这个问题,请尝试以下操作:

InternetDomainName.from("subhost.example.co.uk").topPrivateDomain().name

上面将返回 example.co.uk。

I know this is a few years late but if anyone stumbles across this question try the following:

InternetDomainName.from("subhost.example.co.uk").topPrivateDomain().name

The above will return example.co.uk.

清晨说晚安 2024-09-15 22:09:43

不确定上述答案是否正确:

InternetDomainName.from("test.blogspot.com").topPrivateDomain() -> test.blogspot.com

这在我的情况下效果更好:

InternetDomainName.from("test.blogspot.com").topDomainUnderRegistrySuffix() -> blogspot.com

详细信息:
https://github.com/google/guava/wiki/InternetDomainNameExplained

Not sure if the above answer is correct:

InternetDomainName.from("test.blogspot.com").topPrivateDomain() -> test.blogspot.com

This works better in my case:

InternetDomainName.from("test.blogspot.com").topDomainUnderRegistrySuffix() -> blogspot.com

Details:
https://github.com/google/guava/wiki/InternetDomainNameExplained

¢蛋碎的人ぎ生 2024-09-15 22:09:43

上述解决方案需要您添加Guava。如果您使用 OkHttp 或 Retrofit,您还可以使用

PublicSuffixDatabase.get().getEffectiveTldPlusOne("test.blogspot.com")

这为您提供 blogspot.com

The above solutions require you to add Guava. If you use OkHttp or Retrofit, you can also use

PublicSuffixDatabase.get().getEffectiveTldPlusOne("test.blogspot.com")

This gives you blogspot.com

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文