URI.parse returns sftp 和 ftps 的端口为零
URI.parse returns nil port for sftp and ftps
当我尝试解析以下 URL 时,URI.parse
returns 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的文档中查看。查看命名空间。:
http://ruby-doc.org/stdlib-2.1.0/libdoc/uri/rdoc/URI.html
您会找到 ftp、http、https,但 没有 sftp 或 ftps.
无法识别的 URI 类型为 -> URI::Generic
通过查看他们的文档,您会发现他们的默认端口为 nil。:
http://ruby-doc.org/stdlib-2.1.0/libdoc/uri/rdoc/URI/Generic.html
您可以通过 运行 自己尝试:
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 class。因此,不会自动选择它们的默认端口。
当我尝试解析以下 URL 时,URI.parse
returns 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的文档中查看。查看命名空间。:
http://ruby-doc.org/stdlib-2.1.0/libdoc/uri/rdoc/URI.html
您会找到 ftp、http、https,但 没有 sftp 或 ftps.
无法识别的 URI 类型为 -> URI::Generic
通过查看他们的文档,您会发现他们的默认端口为 nil。:
http://ruby-doc.org/stdlib-2.1.0/libdoc/uri/rdoc/URI/Generic.html
您可以通过 运行 自己尝试:
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 class。因此,不会自动选择它们的默认端口。