модуль OpenURI::OpenRead
Миксин для HTTP и FTP URI.
Общедоступные методы экземпляров
# File lib/open-uri.rb, line 719 def open(*rest, &block) OpenURI.open_uri(self, *rest, &block) end
#open предоставляет `open' для URI::HTTP и URI::FTP.
#open принимает необязательные 3 аргумента как:
OpenURI::OpenRead#open([mode [, perm]] [, options]) [{|io| ... }]
#open возвращает объект типа IO, если блок не задан. В противном случае он передаёт объект IO в блок и возвращает результат выполнения блока. Объект IO расширен с помощью OpenURI::Meta.
mode и perm аналогичны Kernel#open.
Однако, mode должен быть в режиме чтения, поскольку #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, значение должно быть строкой, URI, булевым значением или null.
Если указана строка или URI, она обрабатывается как прокси URI.
Если указано true или параметр не указан, проверяется переменная среды `scheme_proxy`. `scheme` заменяется на `http`, `https` или `ftp`.
Если указано false или null, переменные среды игнорируются, и подключение будет установлено к серверу напрямую.
- :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 элементов. Он должен содержать прокси URI, имя пользователя прокси и пароль прокси. Прокси URI должен быть строкой, URI или null. Имя пользователя прокси и пароль должны быть строками.
Если для прокси URI указано null, этот параметр просто игнорируется.
Если указаны :proxy и :proxy_http_basic_authentication, генерируется исключение ArgumentError.
- :http_basic_authentication
-
Синтаксис:
:http_basic_authentication=>[user, password]
Если указан параметр :http_basic_authentication, значение должно быть массивом, содержащим 2 строки: имя пользователя и пароль. Он используется для HTTP Basic аутентификации, определённой RFC 2617.
- :content_length_proc
-
Синтаксис:
:content_length_proc => lambda {|content_length| ... }Если указан параметр :content_length_proc, процедура, заданная как значение параметра, вызывается перед началом фактического переноса данных. Она принимает один аргумент — ожидаемую длину содержимого в байтах.
Если с помощью HTTP редиректа выполняется два или более переводов, процедура вызывается только один раз для последнего перевода.
Если ожидаемая длина содержимого неизвестна, процедура вызывается с null. Это происходит, когда 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 используется для указания сертификата УЦ для 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.
# File lib/open-uri.rb, line 727
def read(options={})
self.open(options) {|f|
str = f.read
Meta.init str, f
str
}
end #read) считывает содержимое, на которое ссылается self, и возвращает его как строку. Строка расширена с помощью OpenURI::Meta. Аргумент options аналогичен #open.
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.