2011-04-28 64 views
5

我正在Ruby中编写一个简单的程序来检查是否存在一个域列表。基本上它循环遍历一个列表,并使用以下函数进行检查。ECONNRESET(Whois :: ConnectionError) - 尝试在Ruby中查询Whois时出错

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 

回答

2

尝试使用timeout PARAM:

irb(main):002:0> c = Whois::Client.new(:timeout => 100) # 100 seconds 
irb(main):003:0> c.query("google.com").available? 
=> true 
4

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

  1. 你后面的防火墙/代理服务器和客户端无法到达服务器
  2. (更逼真)您的请求被限制。某些.COM服务器(如GoDaddy)用于重置连接,以防止出现多重查询。请参阅this ticket。您可以通过限制对同一服务器的请求数来解决此问题。
+0

西蒙娜,首先很好的答复。我最近自己遇到了这个问题,这对我有很大的帮助。如果我只对域名可用性感兴趣,而不是全面的whois信息,那么我应该检查一下比使用whois gem更好的方式吗? [也许这样](http://stackoverflow.com/a/1780698/574190)? – 2012-03-21 01:48:07

+0

@duckyfuzz你应该开一个新的问题。我在你引用的问题中发布了一个答案,我解释了为什么DNS检查不便宜。确定域可用性的唯一方法是使用库或Web服务运行WHOIS查询。看看[RoboWhois](http://www.robowhois.com/),它由whois gem提供支持,但它提供了一个HTTP API。 – 2012-03-21 08:45:21

+0

哎呀,我没有读过第一个答案。我现在看到你的回复。我的费率限制现在似乎变得非常严重。我在2天的时间内对Whois gem进行了约82/730次可用性检查,因此获得了“Errno :: ECONNRESET”。这听起来极端还是正常? – 2012-03-21 15:21:59

0

之前工作吗? 您向whois服务器发出太多请求。慢一点。

以前不工作? 你不能到达whois服务器