модуль OpenURI::OpenRead
Миксин для URI HTTP и FTP.
Открытые методы экземпляра
# File lib/open-uri.rb, line 715 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 используется для задания сертификата 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.
# File lib/open-uri.rb, line 723
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.