【问题标题】:ECONNRESET (Whois::ConnectionError) - Error Trying to Query Whois in RubyECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错
【发布时间】:2011-04-28 21:17:55
【问题描述】:

我正在用 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

【问题讨论】:

    标签: ruby whois whois-ruby


    【解决方案1】:

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

    1. 您位于防火墙/代理后面,客户端无法访问服务器
    2. (更现实)您的请求被限制了。某些 .COM 服务器(例如 GoDaddy)用于重置连接,以防止多次查询。见this ticket。您可以通过限制对同一服务器的请求数来解决此问题。

    【讨论】:

    • Simone,首先是很棒的回复。我最近自己也遇到了这个问题,这很有帮助。如果我只对域可用性而不是完整的 whois 信息感兴趣,有没有比使用 whois gem 更好的方法来检查它? Perhaps like this?
    • @duckyfuzz 你应该打开一个新问题。我在您引用的问题中发布了一个答案,我解释了为什么 DNS 检查是负担不起的。确定域可用性的唯一方法是使用库或 Web 服务运行 WHOIS 查询。看看RoboWhois,它由 whois gem 提供支持,但它提供了一个 HTTP API。
    • 哎呀,我没有读过第一个答案。我现在看到你的回复了。我的速率限制现在似乎变得非常严重。我在 2 天内通过 Whois gem 进行了大约 82/730 次可用性检查,得到了Errno::ECONNRESET。这听起来是极端的还是正常的?
    • Simone,我刚刚通过您的个人电子邮件(您在个人网站上的电子邮件)向您发送了一些关于 RoboWhois 的后续问题。感谢您迄今为止的帮助。
    • 不客气。看起来您的问题的根源是因为您从 Heroku 发送查询并且......您可能不是唯一执行 WHOIS 请求的 Heroku 用户。 ;)
    【解决方案2】:

    尝试使用timeout 参数:

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

    【讨论】:

      【解决方案3】:

      之前是否有效? 您向 whois 服务器发出过多请求。慢点。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多