ジェネレータを使えば、呼び出し側トリガでread_bodyを回せるなぁ…と思って、少し頭をひねってみる。
#!/usr/bin/env ruby1.9 require 'net/http' require 'uri' require 'enumerator' class WebEnum def initialize(uri) @uri = URI.parse(uri) @http = Net::HTTP.new(@uri.host, @uri.port) @itor = self.to_enum end def next @itor.next rescue StopIteration nil end private def each req = Net::HTTP::Get.new(@uri.path) @http.request(req) do |res| res.read_body do |str| yield(str) end end end end we = WebEnum.new('http://www.hatena.ne.jp/') while chunk = we.next puts "(#{chunk.length}B) #{chunk.slice(0, 16).inspect}" end
~/work$ ./foo.rb
(10548B) "