如何处理ruby中的URL以提取组件(方案,用户名,密码,主机等)?

时间:2010-11-25 06:10:01

标签: ruby url net-ssh

我正在尝试使用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但在这种情况下我需要更低级别的控制。

2 个答案:

答案 0 :(得分:11)

URIAddressable::URI都可以解析网址,并让您将其分解为组件。

URI包含在Ruby的标准库中,这很好,但是Addressable :: 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

答案 1 :(得分:0)

有一个URI课程可以提供帮助。您可能需要先手动将ssh方案替换为http,但我认为URI无法理解开箱即用的ssh方案。