【问题标题】:What can I do about Mechanize waiting on an unresponsive web site?如果 Mechanize 在无响应的网站上等待,我该怎么办?
【发布时间】:2011-07-31 17:27:10
【问题描述】:

我注意到,当我使用 Mechanize 获取没有响应的站点时,它只是一直在等待。

我该如何克服这个问题?

【问题讨论】:

  • 网站是什么,错误是什么?
  • 有问题的网站示例:karusela.net
  • -1 你的问题太模糊了。到目前为止,您没有展示您尝试过的内容。问题标题中的“问题”也是多余的,因为 Stack Overflow 中的所有内容都应该是一个问题。
  • “Stack Overflow 中的所有内容都应该是一个问题。”它是?它是!除此之外,它是一个感叹号! :-)
  • 那么如何解释我得到的答案解决了我的问题这一事实?

标签: ruby-on-rails ruby mechanize


【解决方案1】:

http://mechanize.rubyforge.org/mechanize/Mechanize.html在这个页面上有2个未记录的属性open_timeoutread_timeout,尝试使用它们。

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

HTH

【讨论】:

    【解决方案2】:

    有几种方法可以处理它。

    Open-Uri 和 Net::HTTP 可以传递超时值,然后告诉底层网络堆栈您愿意等待多长时间。例如,Mechanize 允许您在初始化实例时获取其设置,例如:

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

    这一切都在 new 的文档中,但您必须查看源代码才能了解您可以获得哪些实例变量。

    或者你可以使用 Ruby 的 timeout 模块:

    require 'timeout'
    status = Timeout::timeout(5) {
      # Something that should be interrupted if it takes too much time...
    }
    

    【讨论】:

    猜你喜欢
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多