你如何限制红宝石中的typhoeus反应大小?

时间:2012-07-20 22:02:59

标签: ruby-on-rails ruby http typhoeus hydra

我有一些基本上做的代码,其中var urls是一个字符串数组。这是一个提炼版本,但应该表明这一点。

require 'rubygems'
require 'typhoeus'
require 'json'
require 'socket'
def hit_http_urls(urls)
  hydra = Typhoeus::Hydra.new
  hydra.disable_memoization

  urls.each do |url|
    req = Typhoeus::Request.new(url,
          :disable_ssl_peer_verification => true,
          :disable_ssl_host_verification => true,
          :ssl_version => :sslv3,
          :headers=>{'User-Agent' => 'athingy', 'Content-Type' => 'text/xml; charset=utf-8'},
          :timeout => 10)
    req.on_complete { |res|
      puts res.body.length
    }
    hydra.queue(req)
  end
  hydra.run
end

问题是一个(或多个)网址可以有兆字节的响应。由于此函数将在一个主要使用相同网址组的循环中运行,因此我不希望这样。是否有办法在硬限制之后停止接收数据?像a:max_response_size或者什么?

我看过hydra / typhoeus上的rubydocs: http://rubydoc.info/github/dbalatero/typhoeus/master/Typhoeus/Hydra

http://rubydoc.info/github/dbalatero/typhoeus/master/Typhoeus/Request

http://rubydoc.info/gems/typhoeus/0.4.1/file/README.md

但他们似乎没有告诉我一种限制响应体大小的方法。这可能吗?

1 个答案:

答案 0 :(得分:1)

此刻不可能使用Typhoeus,但Ethon。在this Gist中,我演示了如何为response_body提供另一个接收器 - 在这种情况下是一个文件句柄(第12行)。您可以提供类似String的对象,而不能接收超过X个字节。

使用Ethon,您无法获得Typhoeus的舒适感,但在某些情况下它的价值会下降。