5

我正在用 Ruby 编写一个简单的程序来检查是否使用了域列表。基本上它循环遍历一个列表,并使用以下函数进行检查。

require 'rubygems'
require 'whois'

def check_domain(domain)
  c = Whois::Client.new
  c.query("google.com").available?
end

该程序不断出错(即使我在 google.com 中硬编码),并打印下面的消息。鉴于该程序非常简单,我已经没有什么想法了——有什么建议吗?

/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.rb:165:in `query_the_socket': Errno::ECONNRESET: Connection reset by peer (Whois::ConnectionError)
from /Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/verisign.rb:41:in `request'
from /Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.rb:113:in `query'
from /Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.rb:150:in `buffer_start'
from /Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.rb:112:in `query'
from /Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/client.rb:90:in `query'
from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:62:in `timeout'
from /Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/client.rb:87:in `query'
from checker.rb:7:in `check_domain'
from checker.rb:14
from checker.rb:11:in `each'
from checker.rb:11
4

3 回答 3

5

这个问题有两种可能的解释:

  1. 您在防火墙/代理后面,客户端无法访问服务器
  2. (更现实)你的请求被限制了。某些 .COM 服务器(例如 GoDaddy)用于重置连接,以防止出现多个查询。看这张票。您可以通过限制对同一服务器的请求数来解决此问题。
于 2011-04-29T20:02:13.083 回答
2

尝试使用timeout参数:

irb(main):002:0> c = Whois::Client.new(:timeout => 100) # 100 seconds
irb(main):003:0> c.query("google.com").available?
=> true
于 2011-04-28T21:36:31.850 回答
1

以前可以用吗? 您向 whois 服务器发出过多请求。减速。

以前没有工作吗? 您无法访问 whois 服务器

于 2016-10-31T09:38:00.210 回答