Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby parse为sftp和ftps返回零端口_Ruby_Url Parsing - Fatal编程技术网

Ruby parse为sftp和ftps返回零端口

Ruby parse为sftp和ftps返回零端口,ruby,url-parsing,Ruby,Url Parsing,当我尝试解析以下URL时,URI.parse为端口返回nil: require 'uri' url = "ftp://example.com" puts URI.parse(url).port # => 21 url = "sftp://example.com" puts URI.parse(url).port # => nil url = "ftps://example.com" puts URI.parse(url).port # => nil 有人能解释为什么这对

当我尝试解析以下URL时,
URI.parse
为端口返回
nil

require 'uri'

url = "ftp://example.com"
puts URI.parse(url).port
# => 21

url = "sftp://example.com"
puts URI.parse(url).port
# => nil

url = "ftps://example.com"
puts URI.parse(url).port
# => nil

有人能解释为什么这对
ftp
http
https
有效,但对
sftp
ftps
无效吗?

因为sftp和ftps都没有指定,它们使用的端口也没有指定

您可以在URI的文档中查看这一点。查看名称空间:

您会发现ftp、http、https,但没有sftp或ftp

像这些无法识别的URI类型将为->URI::Generic

通过查看他们的文档,您将看到他们的默认端口为nil:

您可以通过运行以下命令自己尝试:

puts URI.parse("sftp://example.com").class

在Ruby中默认情况下不支持它们-

p URI.scheme_list

#=> {"FTP"=>URI::FTP,
     "HTTP"=>URI::HTTP,
     "HTTPS"=>URI::HTTPS,
     "LDAP"=>URI::LDAP,
     "LDAPS"=>URI::LDAPS,
     "MAILTO"=>URI::MailTo}
sftp
ftps
不由任何Ruby类表示。因此,它们的默认端口不会自动拾取