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
- [PARAM]