Ruby 2.2.0 リファレンスマニュアル > ライブラリ一覧 > net/httpライブラリ > Net::HTTPResponseクラス > read_body

instance method Net::HTTPResponse#read_body

read_body(dest=nil) -> String|nil[permalink][rdoc]
read_body {|str| .... } -> ()

ブロックを与えなかった場合にはエンティティボディを文字列で返します。ブロックを与えた場合にはエンティティボディを少しずつ取得して順次ブロックに文字列で与えます。

レスポンスがボディを持たない場合には nil を返します。

例1 ブロックを与えずに一度に結果取得

require 'net/http'

uri = "http://www.example.com/index.html"
response = Net::HTTP.get_response(URI.parse(uri))
response.read_body[0..10] # => "<!doctype h"
例2 ブロックを与えて大きいファイルを取得

require 'net/http'

uri = URI.parse('http://www.example.com/path/to/big.file')
Net::HTTP.start(uri.host, uri.port) do |http|
  File.open("/path/to/big.file", "w") do |f|
    # Net::HTTP#request_get と Net::HTTPResponse#read_body で少しずつ読み書き。メモリ消費が少ない。
    http.request_get(uri.path) do |response|
      response.read_body do |s|
        f.write(s)
      end
    end
  end
end

一度ブロックを与えずにこのメソッドを呼んだ場合には、次からはすでに読みだしたボディを文字列として返します。また一度ブロックを与えてこのメソッドを呼んだ場合には、次からは Net::ReadAdapter のインスタンスが返ってきますが、その場合はそのオブジェクトは使わないでください。

dest は obsolete です。使わないでください。 dest を指定した場合にはボディを少しずつ取得して順次「dest << ボディの断片」を実行します。

[PARAM] dest:
obsoleteな引数です。利用しないでください。

[SEE_ALSO] Net::HTTP#request_get