域名解析器

Platforms License Carthage compatible Swift Package Manager compatible

一个纯 Swift 编写的简单库,它允许使用 Public Suffix List (公共后缀列表) 解析主机名。

这个库允许查找给定 URL 的域名公共后缀 / 顶级域名

什么是公共后缀列表 (Public Suffix List)?

PSL 列出了所有已知的公共后缀(例如:com, co.uk, nt.edu.au, ...)。如果没有这些信息,我们将无法确定 URL 的哪个部分是域名,因为一个后缀可以有多个标签 (Label)。后缀规则还可以包含通配符或通配符的例外情况。 如果你想了解 PSL 匹配规则的完整格式,你可以在 这里 阅读其规范。

PSL 会持续更新。

该列表包括 ICANN 后缀(官方顶级域名)以及私有后缀(例如 us-east-1.amazonaws.com)。

示例

URL 主机 域名 公共后缀 匹配的 PSL 规则 说明
auth.impala.dashlane.com dashlane.com com com 简单规则
sub.domain.co.uk domain.co.uk co.uk co.uk 简单规则
sub.domain.gov.ck domain.gov.ck gov.ck *.ck 通配符规则
sub.domain.any.ck domain.any.ck any.ck *.ck 通配符规则
sub.sub.domain.any.ck domain.any.ck any.ck *.ck 通配符规则
www.ck www.ck ck !www.ck 例外规则
sub.www.ck www.ck ck !www.ck 例外规则
sub.sub.www.ck www.ck ck !www.ck 例外规则

用法

初始化

import DomainParser
...
let domainParser = try DomainParser()

当您解析多个 URL 主机时,应使用同一个实例。

let domain: String? = domainParser.parse(host: "awesome.dashlane.com")?.domain
print(domain ?? "N/A") // dashlane.com
let suffix1: String? = domainParser.parse(host: "awesome.dashlane.com")?.publicSuffix
print(suffix1 ?? "N/A") // com

let suffix2: String? = domainParser.parse(host: "awesome.dashlane.co.uk")?.publicSuffix
print(suffix2 ?? "N/A") // co.uk

更新本地公共后缀列表

该库使用的本地 PSL 位于 DomainParser/DomainParser/Resources/public_suffix_list.dat

要更新它,请在 script 文件夹中运行以下终端命令

swift UpdatePSL.swift