Ruby 4.1 リファレンスマニュアル

class Net::HTTPResponse

[edit]

要約

HTTP レスポンスを表現するクラスです。 Net::HTTP クラスは実際には HTTPResponse のサブクラスを返します。

目次

特異メソッド
インスタンスメソッド
定数

継承しているメソッド

Net::HTTPHeaderから継承しているメソッド

特異メソッド

body_permitted? -> bool[permalink][rdoc][edit]

エンティティボディを含むことが許されているレスポンスクラスならば真を、そうでなければ偽を返します。

require 'net/http'

p Net::HTTPSuccess.body_permitted?   # => true
p Net::HTTPNotModified.body_permitted? # => false

インスタンスメソッド

body -> String | () | nil[permalink][rdoc][edit]
entity -> String | () | nil

エンティティボディを返します。

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

Net::HTTPResponse#read_body をブロック付きで呼んだ場合にはこのメソッドはNet::ReadAdapter のインスタンスを返しますが、これは使わないでください。

entity は obsolete です。

require 'net/http'

uri = "http://www.example.com/index.html"
response = Net::HTTP.get_response(URI(uri))
p response.body[0..10] # => "<!doctype h"
body=(value)Ruby 1.9.1 から[permalink][rdoc][edit]

エンティティボディを value に設定します。

[PARAM] value:
設定するボディを文字列で指定します。
require 'net/http'

uri = URI('http://www.example.com/index.html')
response = Net::HTTP.get_response(uri)
response.body = 'dummy'
p response.body # => "dummy"

[SEE_ALSO] Net::HTTPResponse#body, Net::HTTPResponse#read_body

body_encoding -> Encoding | falseRuby 3.2 から[permalink][rdoc][edit]
body_encoding=(value)

エンティティボディを読み込む際に使うエンコーディングを取得・設定します。

デフォルトは false で、この場合ボディの内容からエンコーディングが推測されます。

value には Encoding オブジェクト、またはエンコーディング名を表す文字列を指定できます。文字列を指定した場合は Encoding.find を使って Encoding オブジェクトに変換されます。

[PARAM] value:
使用するエンコーディング (Encoding オブジェクトまたはその名前を表す文字列)
require 'net/http'

http = Net::HTTP.new('www.example.com')
req = Net::HTTP::Get.new('/')
http.request(req) do |res|
  res.body_encoding = "UTF-8"
  p res.body.encoding # => #<Encoding:UTF-8>
end
code -> String[permalink][rdoc][edit]

HTTP のリザルトコードです。例えば '302' などです。

この値を見ることでレスポンスの種類を判別できますが、レスポンスオブジェクトがどのクラスのインスタンスかを見ることでもレスポンスの種類を判別できます。

require 'net/http'

uri = "http://www.example.com/index.html"
response = Net::HTTP.get_response(URI(uri))
p response.code # => "200"
decode_content -> boolRuby 2.0.0 から[permalink][rdoc][edit]
decode_content=(bool)

エンティティボディの Content-Encoding: を自動的に展開するかどうかを取得・設定します。

ユーザがリクエストヘッダフィールド Accept-Encoding: を明示的に設定・削除していなかった場合に、自動的に真が設定されます。真の場合、Net::HTTPResponse#read_body などでボディを読み込む際に、レスポンスの Content-Encoding: が gzip や deflate であればボディを透過的に展開します。

[PARAM] bool:
Content-Encoding: を自動的に展開するかどうかを真偽値で指定します。

[SEE_ALSO] Net::HTTPGenericRequest#decode_content

response -> self[permalink][rdoc][edit]
header -> self

互換性を保つためだけに導入されたメソッドです。使わないでください。

自分自身を返します。

http_version -> String[permalink][rdoc][edit]

サーバがサポートしている HTTP のバージョンを文字列で返します。

require 'net/http'

uri = "http://www.example.com/index.html"
response = Net::HTTP.get_response(URI(uri))
p response.http_version # => "1.1"
ignore_eof -> boolRuby 3.2 から[permalink][rdoc][edit]
ignore_eof=(bool)

Content-Length: ヘッダフィールドが指定されたボディを読み込む際に、EOF (End Of File) を無視するかどうかを取得・設定します。

[PARAM] bool:
EOF を無視するかどうかを真偽値で指定します。
require 'net/http'

uri = URI('http://www.example.com/index.html')
response = Net::HTTP.get_response(uri)
response.ignore_eof = false
p response.ignore_eof # => false

[SEE_ALSO] Net::HTTP#ignore_eof

message -> String[permalink][rdoc][edit]
msg -> String

HTTP サーバがリザルトコードに付加して返すメッセージです。例えば 'Not Found' などです。

msg は obsolete です。使わないでください。

require 'net/http'

uri = "http://www.example.com/index.html"
response = Net::HTTP.get_response(URI(uri))
p response.message # => "OK"
read_body(dest=nil) -> String|nil[permalink][rdoc][edit]
read_body {|str| .... } -> ()

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

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

例1 ブロックを与えずに一度に結果取得
require 'net/http'

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

uri = URI('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

uri -> URI | nilRuby 2.0.0 から[permalink][rdoc][edit]

このレスポンスの取得に使われた URI オブジェクトを返します。

リクエストの生成に URI オブジェクトを使わなかった場合は nil を返します。

require 'net/http'

uri = URI('http://www.example.com/index.html')
response = Net::HTTP.get_response(uri)
p response.uri # => #<URI::HTTP http://www.example.com/index.html>

[SEE_ALSO] Net::HTTPGenericRequest#uri

value -> nil[permalink][rdoc][edit]

レスポンスが 2xx(成功)でなかった場合に、対応する例外を発生させます。

[EXCEPTION] HTTPError:
レスポンスが 1xx であるか、 net/http が知らない種類のレスポンスである場合に発生します。
[EXCEPTION] HTTPRetriableError:
レスポンスが 3xx である場合に発生します。
[EXCEPTION] HTTPServerException:
レスポンスが 4xx である場合に発生します。
[EXCEPTION] HTTPFatalError:
レスポンスが 5xx である場合に発生します。
例 レスポンスが 2xx(成功)
require 'net/http'

uri = "http://www.example.com/index.html"
response = Net::HTTP.get_response(URI(uri))
p response.value # => nil
例 レスポンスが 2xx以外
require 'net/http'

uri = "http://www.example.com/invalid.html"
response = Net::HTTP.get_response(URI(uri))
begin
  response.value
rescue => e
  e.class # => Net::HTTPServerException
  p e.message # => 404 "Not Found"
end

定数

CODE_CLASS_TO_OBJ -> HashRuby 2.5.0 から[permalink][rdoc][edit]

HTTP レスポンスステータスコードの最初の数字からレスポンスのクラス(分類)をあらわすクラスへのハッシュです。

require 'net/http'
p Net::HTTPResponse::CODE_CLASS_TO_OBJ['3'] # => Net::HTTPRedirection
CODE_TO_OBJ -> HashRuby 2.5.0 から[permalink][rdoc][edit]

HTTP レスポンスステータスコードから対応するクラスへのハッシュです。

require 'net/http'
p Net::HTTPResponse::CODE_TO_OBJ['404'] # => Net::HTTPNotFound