Spec-Zone.ru › Ruby 3.1

модуль OpenURI::OpenRead

Миксин для URI HTTP и FTP.

Публичные методы экземпляров

open(*rest, &block) Показать исходный код
# File lib/open-uri.rb, line 720
def open(*rest, &block)
  OpenURI.open_uri(self, *rest, &block)
end

OpenURI::OpenRead#open предоставляет ‘open’ для URI::HTTP и URI::FTP.

OpenURI::OpenRead#open принимает необязательные 3 аргумента как:

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

OpenURI::OpenRead#open возвращает объект типа IO, если блок не задан. В противном случае он передает объект IO и возвращает результат блока. Объект IO расширен с помощью OpenURI::Meta.

mode и perm такие же, как Kernel#open.

Однако, mode должен быть в режиме чтения, потому что OpenURI::OpenRead#open не поддерживает режим записи (еще). Также perm игнорируется, так как он имеет смысл только для создания файла.

options должен быть хэш.

Каждый параметр со строковым ключом задает дополнительное поле заголовка для HTTP. То есть, он игнорируется для FTP без HTTP-прокси.

Хэш может включать другие параметры, где ключи являются символами:

:proxy

Синтаксис:

: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, значение должно быть массивом Array с 3 элементами. Он должен содержать прокси URI, имя пользователя прокси и пароль прокси. Прокси URI должен быть строкой String, URI URI или nil. Имя пользователя и пароль прокси должны быть строками String.

Если для прокси URI задано nil, этот параметр игнорируется.

Если заданы параметры :proxy и :proxy_http_basic_authentication, генерируется исключение ArgumentError.

:http_basic_authentication

Синтаксис:

:http_basic_authentication=>[user, password]

Если задан параметр :http_basic_authentication, значение должно быть массивом, содержащим две строки: имя пользователя и пароль. Используется для HTTP Basic аутентификации, определенной RFC 2617.

: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’ получает фрагмент содержимого из сети. Аргумент 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 используется для задания сертификата CA для SSL. Если он задан, стандартные сертификаты не используются.

: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

Синтаксис:

:redirect=>bool

:redirect по умолчанию имеет значение true. :redirect => false используется для отключения всех HTTP-перенаправлений.

Исключение OpenURI::HTTPRedirect генерируется при перенаправлении. Использование true также означает, что разрешены перенаправления между http и ftp.

read(options={}) Показать исходный код
# File lib/open-uri.rb, line 728
def read(options={})
  self.open(options) {|f|
    str = f.read
    Meta.init str, f
    str
  }
end

OpenURI::OpenRead#read([ options ]) читает содержимое, на которое ссылается self, и возвращает содержимое в виде строки. Строка расширена с помощью OpenURI::Meta. Аргумент options такой же, как OpenURI::OpenRead#open.

Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API