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

この問題には、次の 2 つの説明が考えられます。

  1. ファイアウォール/プロキシの背後にいて、クライアントがサーバーに到達できない
  2. (より現実的) あなたのリクエストは抑制されています。GoDaddy などの一部の .COM サーバーは、複数のクエリから保​​護する方法として接続をリセットするために使用されます。このチケットを参照してください。この問題は、同じサーバーへの要求の数を制限することで解決できます。
于 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 に答える