我遇到了问题,ruby 2.4.3p205无法处理带有德语变音符号的域名。例如,当您尝试此操作时会出现错误
[1] pry(main)> Resolv::DNS.new.getresource("exämple.com", Resolv::DNS::Resource::IN::MX)
Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ASCII-8BIT
from /usr/local/lib/ruby/2.4.0/resolv.rb:823:in `[]='
修复方法是首先将域转换为punycode,然后将其传递给Resolv::DNS
。我还可以验证是否使用punycode域调用了#getresource
。
但是我深入挖掘并调试了ruby中的resolv.rb。在那里,我发现它使用UDPSocket
来执行请求。来自像webmock这样的令人敬畏的工具我立即想到了#34;我只是发出了UDP调用,并且可以验证请求是使用punycode域进行的,#34;。
但事实证明,webmock无法存储此类请求(否则它将被命名为" udpmock"或类似的东西),所以我想知道是否有一个库用于此或者如何做到这一点。恕我直言,窥探红宝石UDPSocket
并返回虚假物品可能会很麻烦,但我无法想象另一种方法。