【问题标题】:Mechanize pre/post connect hooks机械化前/后连接挂钩
【发布时间】:2012-03-02 08:55:54
【问题描述】:

使用 Mechanize,我需要找到某种方法将请求限制为每秒 1 个(或每 5 秒 1 个,或每分钟 2 个,等等,关键是找到某种方法来限制请求的速率)。

搜索,这似乎是开始解决问题的方法:前/后连接挂钩。只是我不完全知道如何处理它们或如何处理,我从我的水平和研究猜测我需要做一个 lambda 或 proc 说'嘿等一下',似乎足够基本。

我的问题基本上是关于如何执行此操作的示例或其他线索。我尝试了几个 lambdas(而且我对这到底会做什么还不太了解):

@agent.pre_connect_hooks << lambda { |pc| sleep 1 }

但这只会将我的请求变成错误:

ArgumentError: wrong number of arguments (2 for 0)

到目前为止,即使开始阅读机械化代码对我的影响也很小。

感谢任何意见和学习指导。

【问题讨论】:

    标签: ruby mechanize mechanize-ruby


    【解决方案1】:

    您的 lambda 需要 2 个参数:

    agent.pre_connect_hooks << lambda do |agent, request|
      sleep 1
    end
    

    【讨论】:

      【解决方案2】:

      改用Proc

      @agent.pre_connect_hooks &lt;&lt; Proc.new { sleep 1 }

      【讨论】:

      • 是的,这行得通,不知道为什么我坚持做 lambda,但这是一个简单的开始。
      【解决方案3】:

      你也可以通过Method:

      def my_pre_hook(agent, request)
        # Do fun stuff.
      end
      
      agent.pre_connect_hooks << method(:my_pre_hook)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-27
        • 1970-01-01
        相关资源
        最近更新 更多