3

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

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

我的问题基本上是关于如何做到这一点的一个例子或另一个线索。我尝试了几个 lambdas(而且我对这到底会做什么的理解程度很低):

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

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

ArgumentError: wrong number of arguments (2 for 0)

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

任何输入和学习指导表示赞赏。

4

3 回答 3

4

您的 lambda 需要 2 个参数:

agent.pre_connect_hooks << lambda do |agent, request|
  sleep 1
end
于 2012-05-14T02:19:19.023 回答
1

使用 aProc代替:

@agent.pre_connect_hooks << Proc.new { sleep 1 }

于 2012-02-09T20:58:52.683 回答
1

你也可以通过Method

def my_pre_hook(agent, request)
  # Do fun stuff.
end

agent.pre_connect_hooks << method(:my_pre_hook)
于 2012-05-30T10:04:17.877 回答