ECONNRESET (Whois :: ConnectionError) - Ошибка при попытке запроса Whois в Ruby - PullRequest
5 голосов
/ 29 апреля 2011

Я пишу простую программу на 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

Ответы [ 3 ]

5 голосов
/ 30 апреля 2011

Существует два возможных объяснения этой проблемы:

  1. вы находитесь за брандмауэром / прокси и клиент не может связаться с сервером
  2. (более реалистично) ваш запрос блокируется. Некоторые серверы .COM, такие как GoDaddy, используются для сброса соединения в качестве способа защиты от нескольких запросов. Смотрите этот билет . Вы можете решить эту проблему, ограничив количество запросов к одному и тому же серверу.
2 голосов
/ 29 апреля 2011

Попробуйте использовать параметр timeout:

irb(main):002:0> c = Whois::Client.new(:timeout => 100) # 100 seconds
irb(main):003:0> c.query("google.com").available?
=> true
1 голос
/ 31 октября 2016

Работало ли это раньше? Вы делаете слишком много запросов к whois-серверу.Замедление.

Ранее не работал? Вы не можете связаться с whois сервером

...