首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在快捷4中获取URL的顶级域名?

问如何在快捷4中获取URL的顶级域名?
EN

Stack Overflow用户
提问于 2018-07-23 10:14:36
回答 4查看 8.6K关注 0票数 7

我的要求是通过过滤出URL的子域名来获得URL的域名。

我可以使用下面的代码获得主机名

代码语言:javascript
复制
if let url = URL(string: "https://blog.abc.in/")  {
    if let hostName = url.host  {
         print("host name = \(hostName)") // output is: blog.mobilock.in
    }
 }

所以在这里,URL博客是一个子域,abc是一个域名,我只想知道/打印abc,排除它的子域部分。

在android中,有一个类InternetDomainName返回域名,这是我正在寻找的iOS类似的解决方案。

我尝试了几个答案,这不是重复的,或其中任何一个不起作用,或这是一个解决办法。

获取URL字符串的域部分?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-09-20 05:39:27

所以我终于找到了更好、更标准的方法来解决这个问题-

Mozilla志愿者维护公共后缀列表和那里,您可以找到相应语言的库列表。所以在列表中Swift图书馆也是存在的。在编写这个答案时,Swift图书馆没有通过CocoPods添加它的条件,所以您必须将下载的项目直接添加到项目中。假设将Swift图书馆添加到项目中,则获取TLD名称的代码。

代码语言:javascript
复制
import DomainParser

static func getTLD(withSiteURL:String) -> String? {
        do{
            let domainParse = try DomainParser()
            if let publicSuffixName = domainParse.parse(host: withSiteURL)?.publicSuffix {
                if let domainName = domainParse.parse(host: withSiteURL)?.domain {

                    let tldName = domainName.replacingOccurrences(of: publicSuffixName, with: "").replacingOccurrences(of: ".", with: "")
                    print("top level name = \(tldName)")
                    return tldName
                }
            }
        }catch{
        }
        return nil
    }

添加域解析器库作为项目的子项目,因为该库的pod尚未可用。

票数 7
EN

Stack Overflow用户

发布于 2018-07-23 10:27:18

这只是一个解决办法,但效果很好:

代码语言:javascript
复制
    if let url = URL(string: "https://x.y.z.a.b.blog.mobilock.in/")  {
        if let hostName = url.host  {
            print("host name = \(hostName)") // output is: x.y.z.a.b.blog.mobilock.in

            let subStrings = hostName.components(separatedBy: ".")
            var domainName = ""
            let count = subStrings.count
            if count > 2 {
                domainName = subStrings[count - 2] + "." + subStrings[count - 1]
            } else if count == 2 {
                domainName = hostName
            }
            print(domainName)
        }
    }

如果你面临任何问题请告诉我。

票数 3
EN

Stack Overflow用户

发布于 2018-07-23 10:38:44

没有简单的方法,不管语言。有关所涉困难的一些良好讨论,请参见如何从URL中提取顶级域名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51476379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档