本文简要介绍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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。