kind=defined
names=open_uri
visibility=public

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

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

ブロックを与えた場合は [[c: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 には [[c:Hash]] を与えます。理解するハッシュの
キーは以下の4つのシンボル、
 * :proxy
 * :progress_proc
 * :content_length_proc
 * :http_basic_authentication 
です。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
 値には以下のいずれかを与えます。
//emlist{
   文字列:           "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 モードを文字列で与えます。[[m:Kernel.#open]] と同じです。

@param perm 無視されます。

@param options ハッシュを与えます。

@return 返り値である StringIO オブジェクトは [[c:OpenURI::Meta]] モジュールで extend されています。

@raise OpenURI::HTTPError 対象となる URI のスキームが http であり、
                          かつリソースの取得に失敗した時に発生します。

@raise Net::FTPError 対象となる URI のスキームが ftp であり、かつリソースの取得に失敗した時に 
                     [[c:Net::FTPError]] のサブクラスが発生します。詳しくは [[lib:net/ftp]] 
                     を参照して下さい。

@raise ArgumentError 与えられた mode が読み込みモードでなかった場合に発生します。

