0

我有一些基本上可以做到这一点的代码,其中 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

问题是一个(或多个)url 可以有以兆字节为单位的响应。由于这个函数将在一个循环中运行,其中大部分是相同的 url 组,我不想要这个。有没有办法以某种方式在硬限制后停止接收数据?像 :max_response_size 什么的?

我看过关于 hydra/typhoeus 的 ruby​​docs: 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

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

4

1 回答 1

1

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

使用 Ethon,您无法从 Typhoeus 获得舒适感,但在某些情况下值得一试。

于 2012-10-07T20:33:52.970 回答