47 个版本
0.15.6 | 2022 年 8 月 31 日 |
---|---|
0.15.4 | 2022 年 7 月 6 日 |
0.15.3 | 2022 年 1 月 21 日 |
0.15.2 | 2021 年 11 月 29 日 |
0.2.0 | 2018 年 7 月 30 日 |
#194 在 网络编程
每月 368,805 次下载
在 129 个 Crates (30 个直接) 中使用
93KB
815 代码行
健壮且快速解析域名
该库使用 Mozilla 的 Public Suffix List 在 Rust 中可靠地解析域名。它将可靠地检查域名是否有有效语法。它还检查每个标签的长度限制、标签总数以及域名的完整长度。
示例
use addr::{parse_domain_name, parse_dns_name};
// You can find out the root domain
// or extension of any given domain name
let domain = parse_domain_name("www.example.com")?;
assert_eq!(domain.root(), Some("example.com"));
assert_eq!(domain.suffix(), "com");
assert_eq!(domain.prefix(), Some("www"));
let domain = parse_domain_name("www.食狮.中国")?;
assert_eq!(domain.root(), Some("食狮.中国"));
assert_eq!(domain.suffix(), "中国");
let domain = parse_domain_name("www.xn--85x722f.xn--55qx5d.cn")?;
assert_eq!(domain.root(), Some("xn--85x722f.xn--55qx5d.cn"));
assert_eq!(domain.suffix(), "xn--55qx5d.cn");
let domain = parse_domain_name("a.b.example.uk.com")?;
assert_eq!(domain.root(), Some("example.uk.com"));
assert_eq!(domain.suffix(), "uk.com");
let name = parse_dns_name("_tcp.example.com.")?;
assert_eq!(name.suffix(), Some("com."));
// In any case if the domain's suffix is in the list
// then this is definately a registrable domain name
assert!(domain.has_known_suffix());
待办事项
严格国际化域名 (IDN) 验证 (使用 idna
功能标志)
用例
对于那些处理域名的用户,publicsuffix.org/learn/ 列出了许多用例。为了简洁,这里不再一一列举。我在域名注册商工作,因此我们充分利用了这个库。以下是该库的一些用法:
- 验证域名。这可能是显而易见的。如果你有一个
domain.has_known_suffix()
,你可以绝对确信这是一个有效的域名。正则表达式可能不够健壮。 - 黑名单或白名单域名。如果你不知道实际的注册域名,那么盲目地进行这种操作可能会导致过于严格或过于宽松。无论是哪种情况,结果都不好...
- 提取域名的可注册部分,以便你可以检查域名是否已注册。
- 使用域名的可注册部分在 DBMS 中存储域名细节,将其作为主键。
依赖
~2.5MB
~101K SLoC