使用whois gem查询manpôwer.com无匹配结果的技术求助
问题:whois gem无法查询带特殊字符的域名
manpôwer.com 使用whois gem v5.1.0查询域名manpôwer.com时,返回无匹配记录,但该域名可通过Verisign数据库或第三方网站正常查询到。
错误返回示例:
No match for "MANPôWER.COM". >>> Last update of whois database: 2023-03-22T14:56:58Z <<<
irb执行日志:
irb(main):002:0> require 'whois' => true irb(main):003:0> Gem.loaded_specs["whois"].version => #<Gem::Version "5.1.0"> irb(main):004:0> Whois.whois("manpôwer.com") => "No match for \"MANP\xC3\xB4WER.COM\".\r\n>>> Last update of whois database: 2023-03-22T15:25:36Z <<<\r\n\r\nNOTICE: The expiration date displayed in this record...(省略后续条款)"
问题原因
带特殊字符(如ô)的域名属于国际化域名(IDN),Verisign的whois服务器仅支持Punycode格式的IDN查询,而whois gem v5.1.0不会自动将UTF-8格式的IDN转换为Punycode,导致查询的字符串无法被服务器识别。
解决方法
将UTF-8格式的IDN转换为Punycode后再执行查询,步骤如下:
- 安装
simpleidngem(用于IDN与Punycode的转换):
gem install simpleidn
- 在代码中转换域名并查询:
require 'whois' require 'simpleidn' # 将UTF-8域名转换为Punycode punycode_domain = SimpleIDN.to_ascii("manpôwer.com") # 转换结果为:xn--manpwer-0ta.com # 使用Punycode格式的域名查询 result = Whois.whois(punycode_domain) puts result
执行上述代码即可获取该域名的正确whois记录。
内容的提问来源于stack exchange,提问作者Nowmi Nayem
相关产品推荐
相关产品推荐

