一个纯 Swift 编写的简单库,它允许使用 Public Suffix List (公共后缀列表) 解析主机名。
这个库允许查找给定 URL 的域名和公共后缀 / 顶级域名。
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