gpt4 book ai didi

java - 在 Java 中,如何提取 URL 的域?

转载 作者:行者123 更新时间:2023-11-29 04:17:09 27 4
gpt4 key购买 nike

我使用的是 Java 8。我想提取 URL 的域部分。以防万一我错误地使用了“域”这个词,我想要的是如果我的服务器名称是

test.javabits.com

我想提取“javabits.com”。同样,如果我的服务器名称是

firstpart.secondpart.lastpart.org

我想提取“lastpart.org”。我尝试了以下

final String domain = request.getServerName().replaceAll(".*\\.(?=.*\\.)", "");

但它没有正确提取域。然后我尝试了这个人在他网站上的内容 -- https://www.mkyong.com/regular-expressions/domain-name-regular-expression-example/ ,例如

private static final String DOMAIN_NAME_PATTERN = "^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$";

但这也不是提取我想要的东西。如何正确提取域名部分?

最佳答案

总结:不要为此使用正则表达式。使用 whois。

如果我尝试从您的问题中推断出您真正想要做什么,我猜您想要从 URL 的主机部分找到属于某个非基础设施所有者的域。此外,根据您的问题标签,您想借助正则表达式来完成。

您正在执行的任务充其量是不切实际的,但可能是不可能的。

您必须剔除许多极端情况。除了 Lennart 在 https://publicsuffix.org/list/public_suffix_list.dat 中友情提供的基础设施领域列表之外,您也有 URL 中的空主机字段或构成主机部分的 IP 地址的情况。

那么,有没有更好的方法呢?当然有。您要做的是在公共(public)数据库中查询您需要的数据。此类查询的协议(protocol)称为 WHOIS .

Apache Commons 提供了一种访问 WhoisClient 中的 WHOIS 信息的简便方法.从那里您可以查询域字段,并找到一些可能对您有用的更多信息。

不应该比

import org.apache.commons.net.whois.WhoisClient;
import java.io.IOException;

public class CommonsTest {
public static void main(String args) {
WhoisClient c = new WhoisClient();
try {
c.connect(WhoisClient.DEFAULT_HOST);
System.out.println(c.query(URL));
c.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}

使用它可以获得有关您所请求的域的 whois 信息。如果域未注册,即是私有(private)域,如 www.stackexchange.com 的情况,您将收到一条错误消息,指出未注册任何域。删除地址的第一部分,然后重试。找到注册域后,您还会找到注册商和注册商。

不幸的是,whois 并不像人们想象的那么简单。进一步阅读 https://manpages.debian.org/jessie/whois/whois.1.en.html详细说明如何使用它以及您可以从不同来源获得哪些信息。

另外,查看相关问题here.

关于java - 在 Java 中,如何提取 URL 的域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51634183/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com