当我尝试解析以下网址时,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
?
答案 0 :(得分:2)
因为sftp和ftps没有分离,所以它们使用的端口都没有。
您可以在URI文档中查看。查看命名空间:
http://ruby-doc.org/stdlib-2.1.0/libdoc/uri/rdoc/URI.html
您会找到 ftp,http,https ,但没有sftp或ftps 。
无法识别的URI就像这些类型一样 - >的 URI ::通用强>
通过查看他们的文档,您将看到他们的默认端口为nil。:
http://ruby-doc.org/stdlib-2.1.0/libdoc/uri/rdoc/URI/Generic.html
您可以通过以下方式自行尝试:
puts URI.parse("sftp://example.com").class
答案 1 :(得分:1)
Ruby中默认不支持它们 -
p URI.scheme_list
#=> {"FTP"=>URI::FTP,
"HTTP"=>URI::HTTP,
"HTTPS"=>URI::HTTPS,
"LDAP"=>URI::LDAP,
"LDAPS"=>URI::LDAPS,
"MAILTO"=>URI::MailTo}
任何Ruby类都没有表示sftp
和ftps
。因此,不会自动选择它们的默认端口。