Как обрабатывать URL в Ruby, чтобы извлечь компонентные детали (схема, имя пользователя, пароль, хост и т. Д.)?

StackOverflow https://stackoverflow.com/questions/4274213

  •  28-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь создать программу с помощью Ruby (и Net :: SSH) для подключения к серверам и выполнять некоторые задачи. Детали сервера должны быть предоставлены как что-то вроде:

ssh://user:pass@host:port (for a host that does not yet have SSH keys)

или

user@host

Net :: SSH ожидает следующий формат:

Net::SSH.start('host', 'user', :password => "password")

Есть ли GEM / STDLIB, который может обработать URL в этот формат? Или простое регез, которое может соответствовать разным частям?

ПРИМЕЧАНИЕ. Я знаю, и использую, Capistrano, но в этом случае мне нужен более низкий уровень контроля уровня.

Это было полезно?

Решение

Обе Уваживание а также Адресна :: Ури Может разбирать URL-адреса и позволить вам сломать их на их компоненты.

URI включен в стандартную библиотеку Ruby, которая хорошая, но удовлетворена :: URI имеет больше функций, и это то, что я использую, когда я должен сделать много работы по URL.

require 'addressable/uri'

uri = Addressable::URI.parse('ssh://user:pass@www.example.com:81') 
uri.host # => "www.example.com"
uri.user # => "user"
uri.password # => "pass"
uri.scheme # => "ssh"
uri.port # => 81

require 'uri'
uri = URI.parse('ssh://user:pass@www.example.com:81')
uri.host # => "www.example.com"
uri.user # => "user"
uri.password # => "pass"
uri.scheme # => "ssh"
uri.port # => 81

Другие советы

Eсть Уваживание класс, который должен помочь. Возможно, вам придется заменить ssh схема с http вручную, сначала, я не думаю URI понимает то ssh Схема из коробки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top