0

基本的にこれを行うコードがいくつかあります。ここで、varurlsは文字列の配列です。これは蒸留版ですが、要点を示しているはずです。

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

問題は、1つ(または複数)のURLがメガバイト単位で応答する可能性があることです。この関数はほとんど同じURLのグループでループで実行されるため、これは望ましくありません。どういうわけかハード制限後にデータの受信を停止する方法はありますか?: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

しかし、彼らは私に応答の体のサイズを制限する方法を教えていないようです。これは可能ですか?

4

1 に答える 1

1

現時点では Typhoeus では不可能ですが、Ethon では可能ですこの Gistでは、response_body に別のレシーバー (その場合はファイル ハンドル) を提供する方法を示します (12 行目)。代わりに、X バイトを超えて受信できない String のようなオブジェクトを提供できます。

Ethon では、Typhoeus の快適さを利用することはできませんが、場合によってはダウンする価値があります。

于 2012-10-07T20:33:52.970 に答える