我正试图解析一个具有用户名和密码中一些特殊字符(如@ )的FTP URL:
username:p@sswrd@ftp.myhost.com/mypath当我尝试:
URI.parse(url)我得到:
URI::InvalidURIError:该方案ftp不接受注册表部分: username:p@sswrd@ftp.myhost.com (还是坏主机名?)
然后,我试图对网址进行编码:
url = URI.encode(url, '@')但也有另一个错误:
URI::InvalidURIError:该方案ftp不接受注册表部分: username:p%40sswrd%40ftp.myhost.com (还是坏主机名?)
最后,我尝试了另一个解决方案:
URI::FTP.build(:userinfo => 'username:p@sswrd', :host=>'ftp.myhost.com', :path => '/mypath')但我也犯了一个错误:
URI::InvalidComponentError:坏组件(预期用户组件):p@ssword
我用的是红宝石1.8.7。
发布于 2012-01-09 16:04:53
require 'net/ftp'
ftp=Net::FTP.new
ftp.connect("ftp.myhost.com",21)
ftp.login("username","p@sswd")
ftp.getbinaryfile("/mypath"){|data| puts data}
ftp.close发布于 2012-01-08 20:42:55
如果您的ftp服务器支持unicode:
URI::FTP.build(:userinfo => 'username:p%00%40sswrd', :host=>'ftp.myhost.com', :path => '/mypath')应该行得通。正如this discussion所指出的。
但刚刚意识到你尝试了编码却失败了。抱歉的。
发布于 2012-07-16 14:14:57
在接收到以下错误时,我需要设置被动模式:
425 Could not open data connection to port XXXXX: Connection timed out我是这样做的:
require 'net/ftp'
ftp = Net::FTP.new
ftp.passive = true
ftp.connect("ftp.myhost.com",21)
ftp.login("username","p@sswd")
ftp.getbinaryfile("/mypath"){|data| puts data}
ftp.closehttps://stackoverflow.com/questions/8780200
复制相似问题