Java中URL类中的getHost和getAuthority方法有什么区别?

时间:2012-06-26 14:42:41

标签: java networking

我有一系列不同形式的字符串(URL):

  1. http://domain name.anything/anypath
  2. https://dmain name.anything/anypath
  3. http://www.domain name.anything/anypath
  4. https://www.dmain name.anything/anypath
  5. 这些字符串保存在CSV文件中。我需要解析每个URL才能获得域名domain name.anything。即,第一个.之后和第一个/之前的部分。

    我使用split方法分隔字符串,然后将每个字符串转换为URL,然后使用toAuthority函数仅获取域名。问题是,toAuthoritytoHost正在为我做同样的工作,它们包括我不想要的www.。但是,在Oracle的tutorial中,似乎toAuthority应该返回没有www.的域名。

    如何在不使用URL的www.

    的情况下提取域名部分

3 个答案:

答案 0 :(得分:13)

  

URL类中的getHost和getAuthority方法有什么区别?

要真正理解这一点,请阅读URI specification - RFC 2396

简短的回答是,权限组件包含主机组件以及可选的端口号,用户名和密码......取决于所使用的URL方案。


  

如何在没有“www”的情况下提取域名部分。的URL ??

您拨打getHost(),测试它是否以字符串"www."开头,如果是,则将其删除。

但是在你开始做这样的事情之前,你需要了解删除“www。”可能会为您提供一个不起作用的URL,或者解析为与原始URL解析到的文档或服务不同的文档或服务。无偿整理网址是个坏主意......除非您详细了解相关网站的组织方式。

“foo.com”和“www.foo.com”是同一个地方的惯例是只是一个约定,很多网站都没有实现它。删除“www。”这可能是一个坏主意,因为它可能会将可解析的URL转换为无法解析的URL。

答案 1 :(得分:2)

您可以使用google guava从主机名获取域名:

InternetDomainName.from(hostname).topPrivateDomain().toString()

答案 2 :(得分:1)

听起来您正在寻找有效的二级域名。通过首先获取主机名(如Stephen描述)并从末尾开始以第二个句点开始提取子字符串,可以轻松地提取少量公共后缀(如.com,.net,.org)。许多公共后缀如co.uk将打破这个简单的算法。可以在此处找到完整的公共后缀列表:http://publicsuffix.org/然后,您可以在查找表中使用公共后缀来获取有效的二级域名。