Ruby parse为sftp和ftps返回零端口
当我尝试解析以下URL时,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 有人能解释为什么这对
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类表示。因此,它们的默认端口不会自动拾取