Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library open-uri > module OpenURI > open_uri

singleton method OpenURI.open_uri

open_uri(name, mode = 'r', perm = nil, options = {}) -> StringIO
open_uri(name, mode = 'r', perm = nil, options = {}) {|sio| ... } -> nil

URI である文字列 name のリソースを取得して StringIO オブジェクト として返します。

ブロックを与えた場合は StringIO オブジェクトを引数としてブロックを 評価します。ブロックの終了時に StringIO は close されます。nil を返します。

require 'open-uri'
sio = OpenURI.open_uri('http://www.example.com')
p sio.last_modified
puts sio.read

OpenURI.open_uri('http://www.example.com'){|sio| sio.read }

options には Hash を与えます。理解するハッシュの キーは以下の4つのシンボル、

です。HTTP でのみ意味があります。 「:content_length_proc」と「:progress_proc」はプログレスバーに 利用されることを想定しています。

require 'open-uri'
sio = OpenURI.open_uri('http://www.example.com',
                       { :proxy => 'http://proxy.example.com:8000/',
                         :http_basic_authentication => [usrname, password] })
:proxy

値には以下のいずれかを与えます。

   文字列:           "http://proxy.foo.com:8000/" のようなプロクシの URI。
   URI オブジェクト: URI.parse("http://proxy.foo.com:8000/") のようなプロクシの URI オブジェクト。
   true:             Proxy を環境変数などから見つけようとする。
   false:            Proxy を用いない。
   nil:              Proxy を用いない。
:http_basic_authentication

HTTP の Basic 認証のためのユーザ名とパスワードを、文字列の配列 ["user", "password"] として与えます。

:content_length_proc

値にはブロックを与えます。ブロックは対象となる URI の Content-Length ヘッダの値を引数として、実際の転送が始まる前に評価されます。Redirect された場合は、 実際に転送されるリソースの HTTP ヘッダを利用します。Content-Length ヘッダがない場合は、nil を 引数としてブロックを評価します。ブロックの返り値は特に利用されません。

:progress_proc

値にはブロックを与えます。ブロックは対象となる URI からデータの 断片が転送されるたびに、その断片のサイズを引数として評価されます。ブロックの返り値は特に 利用されません。

[PARAM] name:
オープンしたいリソースを文字列で与えます。
[PARAM] mode:
モードを文字列で与えます。Kernel.#open と同じです。
[PARAM] perm:
無視されます。
[PARAM] options:
ハッシュを与えます。
[RETURN]
返り値である StringIO オブジェクトは OpenURI::Meta モジュールで extend されています。
[EXCEPTION] OpenURI::HTTPError:
対象となる URI のスキームが http であり、 かつリソースの取得に失敗した時に発生します。
[EXCEPTION] Net::FTPError:
対象となる URI のスキームが ftp であり、かつリソースの取得に失敗した時に Net::FTPError のサブクラスが発生します。詳しくは net/ftp を参照して下さい。
[EXCEPTION] ArgumentError:
与えられた mode が読み込みモードでなかった場合に発生します。