我正在使用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方法呢?谢谢.
根据规范中的定义,URL 用户名仅允许使用以下字符:
user alphanum2 [ user ]
[...]
alphanum2 alpha | digit | - | _ | . | +
Run Code Online (Sandbox Code Playgroud)
浏览器因忽略规范而臭名昭著,因此说它们支持它并不是一个很好的证明。他们不应该按照规范。
如果 cURL 支持它们,那么使用Curb gem 看看是否可以让您使用它们。