模組 OpenURI::OpenRead

HTTP 和 FTP URI 的混入。

公開實例方法

open(*rest, &block) 按一下以切換來源

OpenURI::OpenRead#openURI::HTTPURI::FTP 提供「open」。

OpenURI::OpenRead#open 採用 3 個選用引數,如下所示

OpenURI::OpenRead#open([mode [, perm]] [, options]) [{|io| ... }]

OpenURI::OpenRead#open 如果未提供區塊,則傳回類似的 IO 物件。否則,它會產生 IO 物件,並傳回區塊的值。 IO 物件會延伸 OpenURI::Meta

modepermKernel#open 相同。

不過,mode 必須是讀取模式,因為 OpenURI::OpenRead#open 尚未支援寫入模式。此外,perm 會被忽略,因為它僅對建立檔案有意義。

options 必須是雜湊。

每個字串金鑰的選項會指定 HTTP 的額外標頭欄位。亦即,它會被忽略,而不會使用 HTTP 代理的 FTP。

雜湊可能包含其他選項,其中金鑰是符號

:proxy

摘要

:proxy => "http://proxy.foo.com:8000/"
:proxy => URI.parse("http://proxy.foo.com:8000/")
:proxy => true
:proxy => false
:proxy => nil

如果指定了 :proxy 選項,則其值應該是 StringURI、布林值或 nil。

提供 StringURI 時,它會被視為代理 URI

提供 true 或未指定選項本身時,會檢查環境變數「scheme_proxy」。「scheme」會被替換為「http」、「https」或「ftp」。

提供 false 或 nil 時,會忽略環境變數,且會直接連線至伺服器。

:proxy_http_basic_authentication

摘要

:proxy_http_basic_authentication =>
  ["http://proxy.foo.com:8000/", "proxy-user", "proxy-password"]
:proxy_http_basic_authentication =>
  [URI.parse("http://proxy.foo.com:8000/"),
   "proxy-user", "proxy-password"]

如果指定了 :proxy 選項,則其值應該是包含 3 個元素的 Array。它應包含代理 URI、代理使用者名稱和代理密碼。代理 URI 應該是 StringURI 或 nil。代理使用者名稱和密碼應該是 String

如果代理 URI 提供 nil,則此選項會被忽略。

如果指定了 :proxy 和 :proxy_http_basic_authentication,則會引發 ArgumentError

:http_basic_authentication

摘要

:http_basic_authentication=>[user, password]

如果指定了 :http_basic_authentication,則其值應為包含 2 個字串的陣列:使用者名稱和密碼。它用於 RFC 2617 定義的 HTTP 基本驗證。

:content_length_proc

摘要

:content_length_proc => lambda {|content_length| ... }

如果指定了 :content_length_proc 選項,則在開始實際傳輸之前會呼叫選項值程序。它只有一個引數,預期內容長度(以位元組為單位)。

如果透過 HTTP 重新導向執行兩次或多次傳輸,則只會對最後一次傳輸呼叫一次程序。

當預期的內容長度未知時,會以 nil 呼叫程序。當 HTTP 回應沒有 Content-Length 標頭時,就會發生這種情況。

:progress_proc

摘要

:progress_proc => lambda {|size| ...}

如果指定了 :progress_proc 選項,則每次「開啟」從網路取得內容片段時,都會以一個引數呼叫程序。引數 size 是累積傳輸的大小(以位元組為單位)。

如果透過 HTTP 重新導向執行兩次或多次傳輸,則只會對最後一次傳輸呼叫一次程序。

:progress_proc 和 :content_length_proc 旨在用於進度條。例如,可以使用 Ruby/ProgressBar 如下實作。

pbar = nil
open("http://...",
  :content_length_proc => lambda {|t|
    if t && 0 < t
      pbar = ProgressBar.new("...", t)
      pbar.file_transfer_mode
    end
  },
  :progress_proc => lambda {|s|
    pbar.set s if pbar
  }) {|f| ... }
:read_timeout

摘要

:read_timeout=>nil     (no timeout)
:read_timeout=>10      (10 second)

:read_timeout 選項指定 HTTP 連線的讀取逾時時間。

:open_timeout

摘要

:open_timeout=>nil     (no timeout)
:open_timeout=>10      (10 second)

:open_timeout 選項指定 HTTP 連線的開啟逾時時間。

:ssl_ca_cert

摘要

:ssl_ca_cert=>filename or an Array of filenames

:ssl_ca_cert 用於指定 SSL 的 CA 憑證。如果已提供,則不會使用預設憑證。

:ssl_verify_mode

摘要

:ssl_verify_mode=>mode

:ssl_verify_mode 用於指定 openssl 驗證模式。

:ssl_min_version

摘要

:ssl_min_version=>:TLS1_2

:ssl_min_version 選項指定允許的最小 SSL/TLS 協定版本。另請參閱 OpenSSL::SSL::SSLContext#min_version=

:ssl_max_version

摘要

:ssl_max_version=>:TLS1_2

:ssl_max_version 選項指定允許的最大 SSL/TLS 協定版本。另請參閱 OpenSSL::SSL::SSLContext#max_version=

:ftp_active_mode

摘要

:ftp_active_mode=>bool

:ftp_active_mode => true 用於設定 ftp 主動模式。Ruby 1.9 預設使用被動模式。請注意,主動模式是 Ruby 1.8 或更早版本的預設模式。

:redirect

摘要

:redirect=>bool

:redirect 預設為 true。:redirect => false 用於停用所有 HTTP 重新導向。

重新導向時會引發 OpenURI::HTTPRedirect 例外。使用 true 也表示允許在 http 和 ftp 之間重新導向。

# File lib/open-uri.rb, line 749
def open(*rest, &block)
  OpenURI.open_uri(self, *rest, &block)
end
read(options={}) 按一下以切換原始碼

OpenURI::OpenRead#read([ options ]) 讀取 self 參照的內容,並以字串形式傳回內容。字串會延伸 OpenURI::Meta。參數 optionsOpenURI::OpenRead#open 相同。

# File lib/open-uri.rb, line 757
def read(options={})
  self.open(options) {|f|
    str = f.read
    Meta.init str, f
    str
  }
end