我尝试上传到我的服务器(在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
提前致谢。
答案 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?
这应该为你提供一个很好的起点,让你自己完成休息。
为了让您前进,我会猜测您可以使用user:pass@myproxy.com
进行基本身份验证,或者在您的GET请求中发送Proxy-Authorization
标头。