首页  >  文章  >  Java  >  如何可靠地从 URL 中提取域名:替代技术和边缘情况

如何可靠地从 URL 中提取域名:替代技术和边缘情况

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-01 01:23:02231浏览

How to Extract Domain Names from URLs Reliably: Alternative Techniques and Edge Cases

从 URL 中提取域名

本题旨在有效地从 URL 中提取域名。虽然提供的 Java 代码似乎运行合理,但作者询问了任何可能损害其可靠性的高级技术或潜在的边缘情况。

使用 java.net.URI 的替代实现

建议使用更简洁的 URL 解析方法,即使用 java.net.URI 类而不是 java.net.URL。后者存在已知问题,例如其有问题的 equals 方法,该方法可能会在涉及不受信任输入的场景中使代码暴露于漏洞:

public static String getDomainName(String url) throws URISyntaxException {
    URI uri = new URI(url);
    String domain = uri.getHost();
    return domain.startsWith("www.") ? domain.substring(4) : domain;
}

这种改进的方法应该能够有效地检索域名,同时处理涉及不正确大小写或大小写的边缘情况。 “www”前缀的变体。

需要考虑的其他边缘情况

原始代码无法考虑特定的 URL 格式:

  • httpfoo/bar(路径以“http”开头的相对 URL)
  • HTTP://example.com(不区分大小写的协议)
  • //example.com(协议相对 URL)与主机)
  • www/foo(路径以“www”开头的相对 URL)
  • wwwexample.com(以“www”开头的域,但不包含“www”前缀)

要解决这些边缘情况,请考虑参考 RFC 3986 的附录 B,它提供了一个全面的正则表达式,用于解析 URI 引用并将它们分解为单独的组件。

以上是如何可靠地从 URL 中提取域名:替代技术和边缘情况的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn