当用户名有空格时,Ruby OpenURI FTP无效

mod*_*ron 5 ruby ftp open-uri

我正在使用Ruby 1.9.3并运行以下命令:

open("ftp://user name:password@datafeeds.domain.com/1234/1234.txt.gz")
Run Code Online (Sandbox Code Playgroud)

返回:

URI :: InvalidURIError:错误的URI(不是URI?)

对用户名进行编码(用%20替换空格)也不起作用:

Net :: FTPPermError:530无效的用户ID /密码

URI在所有测试的浏览器和FTP客户端中都能正常工作 - 只是在使用OpenURI时没有.此外,使用Net :: FTP(由OpenURI包装)也可以正常工作:

require 'net/ftp'
ftp = Net::FTP.new
ftp.connect("datafeeds.domain.com", 21)
ftp.login("user name", "password")
ftp.getbinaryfile("/1234/1234.txt.gz")
Run Code Online (Sandbox Code Playgroud)

知道为什么OpenURI方法不起作用,而Net :: FTP方法呢?谢谢.

the*_*Man 2

根据规范中的定义,URL 用户名仅允许使用以下字符:

user                   alphanum2 [ user ]
[...]
alphanum2              alpha | digit | - | _ | . | +  
Run Code Online (Sandbox Code Playgroud)

浏览器因忽略规范而臭名昭著,因此说它们支持它并不是一个很好的证明。他们不应该按照规范。

如果 cURL 支持它们,那么使用Curb gem 看看是否可以让您使用它们。