Что я могу сделать с механизированным ожиданием на не отвечающем веб-сайте? - PullRequest
6 голосов
/ 07 апреля 2011

Я заметил, что когда я выбираю сайт, который не отвечает с помощью Механизировать , он просто продолжает ждать.

Как я могу преодолеть эту проблему?

Ответы [ 2 ]

10 голосов
/ 07 апреля 2011

Есть несколько способов справиться с этим.

Open-Uri и Net :: HTTP имеют способы передачи значений времени ожидания, которые затем сообщают базовому сетевому стеку, как долго вы готовы ждать. Например, Mechanize позволяет вам получить его настройки при инициализации экземпляра, например:

mech = Mechanize.new { |agent|
  agent.open_timeout   = 5
  agent.read_timeout   = 5
}

Это все в документации для new, но вам нужно будет просмотреть исходный код, чтобы узнать, какие переменные экземпляра вы можете получить.

Или вы можете использовать модуль Ruby's timeout:

require 'timeout'
status = Timeout::timeout(5) {
  # Something that should be interrupted if it takes too much time...
}
3 голосов
/ 07 апреля 2011

http://mechanize.rubyforge.org/mechanize/Mechanize.html на этой странице есть 2 недокументированных атрибута open_timeout и read_timeout, попробуйте их использовать.

agent = Mechanize.new { |a| a.log = Logger.new("mech.log") }
agent.keep_alive=false
agent.open_timeout=15
agent.read_timeout=15

НТН

...