本文簡要介紹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
。
mode
和 perm
與 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 Open3.capture3用法及代碼示例
- Ruby Open3.capture2用法及代碼示例
- Ruby OpenStruct.ostruct[name] =用法及代碼示例
- Ruby OpenSSL.fips_mode =用法及代碼示例
- Ruby OpenSSL模塊用法及代碼示例
- Ruby Open3.capture2e用法及代碼示例
- Ruby Open3.popen2e用法及代碼示例
- Ruby Open3.popen3用法及代碼示例
- Ruby Open3.popen2用法及代碼示例
- Ruby OpenSSL.print_mem_leaks用法及代碼示例
- Ruby Open3.pipeline用法及代碼示例
- Ruby OpenURI模塊用法及代碼示例
- Ruby Open3.pipeline_rw用法及代碼示例
- Ruby OpenStruct類用法及代碼示例
- Ruby OpenSSL.Digest用法及代碼示例
- Ruby OpenStruct.==用法及代碼示例
- Ruby OpenStruct.each_pair用法及代碼示例
- Ruby OpenStruct.delete_field用法及代碼示例
- Ruby OpenStruct.dig用法及代碼示例
- Ruby Open3.pipeline_w用法及代碼示例
- Ruby Open3.pipeline_r用法及代碼示例
- Ruby OpenStruct.new用法及代碼示例
- Ruby Open3.pipeline_start用法及代碼示例
- Ruby OpenStruct.ostruct[name]用法及代碼示例
- Ruby Option.level用法及代碼示例
注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 OpenRead.open。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。