このマニュアルは既にメンテナンスが終了したバージョンの Ruby を対象としています。 最新版のマニュアルへ

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

singleton method URI.open

open(name, mode = 'r', perm = nil, options = {}) -> StringIO | Tempfile | IORuby 2.5.0 から[permalink][rdoc][edit] [added by open-uri]
open(name, mode = 'r', perm = nil, options = {}) {|ouri| ...} -> object [added by open-uri]

name が http:// や https://、ftp:// で始まっている文字列なら URI のリソースを取得した上で StringIO オブジェクトまたは Tempfile オブジェクトとして返します。返されるオブジェクトは OpenURI::Meta モジュールで extend されています。

name に open メソッドが定義されている場合は、*rest を引数として渡し name.open(*rest, &block) のように name の open メソッドが呼ばれます。

これ以外の場合は、name はファイル名として扱われ、従来の Kernel.#open(name, *rest) が呼ばれます。

ブロックを与えた場合は上の場合と同様、name が http:// や https://、ftp:// で始まっている文字列なら URI のリソースを取得した上で StringIO オブジェクトまたは Tempfile オブジェクトを引数としてブロックを評価します。後は同様です。引数のオブジェクトは OpenURI::Meta モジュールで extend されています。

[PARAM] name:
オープンしたいリソースを文字列で与えます。
[PARAM] mode:
モードを文字列で与えます。Kernel.#open の mode_enc とおおむね同じですが、外部エンコーディングの指定(ext_enc)は有効な一方、内部エンコーディングの指定 (ext_enc:int_enc の int_enc)は無視されます。内部エンコーディングへの変換が必要な場合は、読み込んだ文字列を String#encode で変換してください (返り値のオブジェクトはレスポンスの大きさによって StringIO にも Tempfile ベースの IO にもなり、IO#set_encoding による内部エンコーディングへの変換は StringIO では行われないためです)。
require 'open-uri'

# 外部エンコーディングとして cp932 を指定し、
# 読み込んだ文字列を String#encode で UTF-8 に変換する
URI.open('http://example.com/', 'r:cp932') do |f|
  f.read.encode('UTF-8', invalid: :replace, undef: :replace)
end
[PARAM] perm:
open(2) の第 3 引数のように、ファイルを生成する場合のファイルのパーミッションを整数で指定します。Kernel.#open と同じです
[PARAM] options:
ハッシュを与えます。詳しくは OpenURI.open_uri を参照してください。
[EXCEPTION] OpenURI::HTTPError:
対象となる URI のスキームが http または https であり、かつリソースの取得に失敗したときに発生します。
[EXCEPTION] Net::FTPError:
対象となる URI のスキームが ftp であり、かつリソースの取得に失敗した時に Net::FTPError のサブクラスが発生します。詳しくは net/ftp を参照して下さい。

[SEE_ALSO] Kernel.#open, OpenURI.open_uri