當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Ruby OpenRead.open用法及代碼示例


本文簡要介紹ruby語言中 OpenURI::OpenRead.open 的用法。

用法

open(*rest, &block)

OpenURI::OpenRead#open URI::HTTP URI::FTP 提供 ‘open’ 。

OpenURI::OpenRead#open 采用可選的 3 個參數:

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

如果沒有給出塊, OpenURI::OpenRead#open 返回一個 IO-like 對象。否則,它會產生 IO 對象並返回塊的值。 IO 對象擴展為 OpenURI::Meta

modeperm Kernel#open 相同。

但是,mode 必須是讀取模式,因為 OpenURI::OpenRead#open 不支持寫入模式(目前)。 perm 也被忽略,因為它僅對文件創建有意義。

options 必須是哈希。

每個帶有字符串鍵的選項都為 HTTP 指定一個額外的標頭字段。即,對於沒有 HTTP 代理的 FTP,它會被忽略。

哈希可能包括其他選項,其中鍵是符號:

:代理

概要:

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

如果指定了 :proxy 選項,則該值應為 String URI 、布爾值或 nil。

String URI 給出時,它被視為代理 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 應該是 String URI 或 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 選項,則每次 ‘open’ 從網絡獲取內容片段時,都會使用一個參數調用 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 驗證模式。

:ftp_active_mode

概要:

:ftp_active_mode=>bool

:ftp_active_mode => true 用於使 ftp 處於活動模式。 Ruby 1.9 默認使用被動模式。請注意,活動模式在 Ruby 1.8 或更早版本中是默認的。

:重定向

概要:

:redirect=>bool

:redirect 默認為真。 :redirect => false 用於禁用所有 HTTP 重定向。

OpenURI::HTTPRedirect 重定向時引發異常。使用 true 也意味著允許 http 和 ftp 之間的重定向。

相關用法


注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 OpenRead.open。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。