当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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