You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Tokenizer解析WhoIs数据?请求示例代码

使用Tokenizer解析WHOIS数据的示例方案

我看你已经成功抓取到了WHOIS原始数据,但在Tokenizer的模式定义上有点小问题,咱们来一步步调整,实现正确的解析。

首先,你需要先定义一个和WHOIS数据字段对应的实体类,用来存储解析后的结果:

public class WhoisRecord
{
    public string DomainName { get; set; }
    public string RegistryDomainId { get; set; }
    public DateTime? UpdatedDate { get; set; }
    public DateTime? CreationDate { get; set; }
    public DateTime? ExpirationDate { get; set; }
    public string Registrar { get; set; }
    public string RegistrantOrganization { get; set; }
    public string RegistrantCountry { get; set; }
    public List<string> DomainStatuses { get; set; } = new List<string>();
    public List<string> NameServers { get; set; } = new List<string>();
    public string DnsSec { get; set; }
}

接下来是Tokenizer的核心:正确的模式定义。WHOIS数据是每行键: 值的格式,对于重复出现的字段(比如Domain Status、Name Server),我们需要用[]来标记数组类型的匹配:

var pattern = @"
Domain Name: {DomainName}
Registry Domain ID: {RegistryDomainId}
Updated Date: {UpdatedDate:yyyy-MM-ddTHH:mm:sszzz}
Creation Date: {CreationDate:yyyy-MM-ddTHH:mm:sszzz}
Registrar Registration Expiration Date: {ExpirationDate:yyyy-MM-ddTHH:mm:sszzz}
Registrar: {Registrar}
Registrant Organization: {RegistrantOrganization}
Registrant Country: {RegistrantCountry}
Domain Status: {DomainStatuses[]}
Name Server: {NameServers[]}
DNSSEC: {DnsSec}
";

这里要注意:

  • 日期字段需要指定格式,和WHOIS里的日期格式匹配,Tokenizer会自动转换为DateTime?类型
  • 重复的字段(比如多个Domain Status)用{字段名[]}来表示数组,解析后会自动存入List集合

然后把你的代码整合起来,完整的示例如下:

// 假设你已经获取到了WHOIS原始数据
var result = await WhoisClient.QueryAsync("google.com");
string rawWhois = result.Raw;

// 初始化Tokenizer
var tokenizer = new Tokenizer();

// 定义模式和实体类
var pattern = @"
Domain Name: {DomainName}
Registry Domain ID: {RegistryDomainId}
Updated Date: {UpdatedDate:yyyy-MM-ddTHH:mm:sszzz}
Creation Date: {CreationDate:yyyy-MM-ddTHH:mm:sszzz}
Registrar Registration Expiration Date: {ExpirationDate:yyyy-MM-ddTHH:mm:sszzz}
Registrar: {Registrar}
Registrant Organization: {RegistrantOrganization}
Registrant Country: {RegistrantCountry}
Domain Status: {DomainStatuses[]}
Name Server: {NameServers[]}
DNSSEC: {DnsSec}
";

// 解析数据
var whoisRecord = tokenizer.Parse<WhoisRecord>(pattern, rawWhois);

// 测试输出
MessageBox.Show($"Domain Name: {whoisRecord.DomainName}");
MessageBox.Show($"Creation Date: {whoisRecord.CreationDate?.ToString("yyyy-MM-dd")}");
MessageBox.Show($"Registrar: {whoisRecord.Registrar}");
// 输出所有域名状态
foreach (var status in whoisRecord.DomainStatuses)
{
    MessageBox.Show($"Domain Status: {status}");
}

关键注意点

  • 模式里的每行要和WHOIS原始数据的行格式完全匹配,包括空格和标点,比如Domain Name:后面的空格不能少
  • 对于不需要解析的字段,可以直接在模式里省略,Tokenizer会忽略它们
  • 如果某些字段可能不存在,对应的实体类属性要设为可空类型(比如DateTime?)或者给默认值

内容的提问来源于stack exchange,提问作者nav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:00:23