通过Ruby中的PROXY连接到受密码保护的FTP

时间:2014-07-21 09:53:38

标签: ruby-on-rails ruby proxy ftp

我尝试上传到我的服务器(在Heroku上)存储在受密码保护的FTP 中的文件。

问题是这个FTP还没有在他的白名单中包含我的生产IP地址(并且我不能添加它..)所以我应该使用代理连接我的rails应用这个FTP。

我试过这段代码:

proxy_uri = URI(ENV['QUOTAGUARDSTATIC_URL'] || 'http://login:password@myproxy.com:9293')

Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port,"login","password").start('ftp://login:password@ftp.website.com') do |http|
  http.get('/path/to/myfile.gz').body
end

但我的http.get会给我lookup ftp: no such host

我也有这个FTP下载代码,但我不知道如何让它与代理一起使用

ftp = Net::FTP.new('ftp.myftp.com', 'login', 'password')
ftp.chdir('path/to')
ftp.getbinaryfile('myfile.gz', 'public/myfile.gz', 1024)
ftp.close

提前致谢。

1 个答案:

答案 0 :(得分:2)

我意识到你在6个月前问了这个问题,但我最近遇到了类似的问题,发现这个(未答复的)问题是最高的Google结果,所以我想我会分享我的发现。< / p> 你原来帖子下面的mudasobwa评论有一个net / ftp文档的链接,它解释了如何使用SOCKS代理...

虽然您没有在原始帖子中提及HTTP代理的特定要求,但对我来说,这似乎是您尝试使用的内容。我确信你知道,这使得SOCKS文档完全无关紧要。

以下代码已使用要求身份验证的HTTP代理在ruby-1.8.7-p357上进行了测试:

file = File.open('myfile.gz', 'w')
http = Net::HTTP.start('myproxy.com', '9293')
resp, data = http.get('ftp://login:password@ftp.website.com')
file.write(data) if resp.code == "200"
file.close unless file.nil?

Source

这应该为你提供一个很好的起点,让你自己完成休息。

为了让您前进,我会猜测您可以使用user:pass@myproxy.com进行基本身份验证,或者在您的GET请求中发送Proxy-Authorization标头。