栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java从给定的URL获取域名

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java从给定的URL获取域名

如果要解析URL,请使用java.net.URI。 java.net.URL有很多问题-它的equals方法进行DNS查找,这意味着与不可信输入一起使用时,使用它的代码可能容易受到拒绝服务攻击的攻击。

“戈斯林先生-为什么要使网址等于糟透了?” 解释了一个这样的问题。只是养成使用java.net.URI代替的习惯。

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;
}
应该做你想做的。


尽管它似乎运行良好,但是有没有更好的方法或有一些极端的情况可能会失败。

你编写的代码对有效的URL无效:

  • httpfoo/bar
    -相对URL带有以
    http
    。开头的路径组件。
  • HTTP://example.com/
    -协议不区分大小写。
  • //example.com/
    -主机的协议相对URL
  • www/foo
    -相对URL的路径部分以
    www
  • wwwexample.com
    -这不域名开头
    www.
    ,但开始用
    www

分层URL具有复杂的语法。如果你尝试不仔细阅读RFC 3986而推出自己的解析器,则可能会弄错。只需使用核心库中内置的一个即可。

如果你确实需要处理

java.net.URI
拒绝的混乱输入,请参阅RFC 3986附录B:

附录B.使用正则表达式解析URI引用
由于“首次匹配获胜”算法与POSIX正则表达式使用的“贪婪”消歧方法相同,因此使用正则表达式解析URI引用的潜在五个组成部分是自然而普遍的。

下一行是用于将格式正确的URI引用分解为其组件的正则表达式。

  ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(?([^#]*))?(#(.*))?   12 3  4          5       6  7        8 9

上面第二行中的数字仅用于增强可读性。它们指示每个子表达式(即,每个成对的括号)的参考点。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456511.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号