2012-01-08 29 views
4

我試圖解析具有一些特殊的字符,如在用戶名@和密碼的FTP網址:當我嘗試如何解析具有特殊字符的用戶名或密碼的FTP URL?

username:[email protected]@ftp.myhost.com/mypath 

URI.parse(url) 

我得到:

URI::InvalidURIError: the scheme ftp does not accept registry part: username:[email protected]@ftp.myhost.com (or bad hostname?)

然後,我試着編碼url:

url = URI.encode(url, '@') 

而且還得到了另一個錯誤:

URI::InvalidURIError: the scheme ftp does not accept registry part: username:p%40sswrd%40ftp.myhost.com (or bad hostname?)

最後,我嘗試另一種解決方案:

URI::FTP.build(:userinfo => 'username:[email protected]', :host=>'ftp.myhost.com', :path => '/mypath') 

但我也得到了一個錯誤:

URI::InvalidComponentError: bad component(expected user component): [email protected]

我使用的紅寶石1.8 0.7。

回答

1
require 'net/ftp' 
ftp=Net::FTP.new 
ftp.connect("ftp.myhost.com",21) 
ftp.login("username","[email protected]") 
ftp.getbinaryfile("/mypath"){|data| puts data} 
ftp.close 
+0

除了你沒有回答你自己的問題,如何解析... – 2014-12-16 18:57:14

0

如果FTP服務器支持Unicode:

URI::FTP.build(:userinfo => 'username:p%00%40sswrd', :host=>'ftp.myhost.com', :path => '/mypath') 

應該工作。如this discussion所示。

但剛剛意識到你試過編碼,它失敗了。抱歉。

+0

是的,沒有工作 – 2012-01-09 13:45:08

0

我需要將其設置爲我收到以下錯誤被動模式:

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","[email protected]") 
ftp.getbinaryfile("/mypath"){|data| puts data} 
ftp.close