ruby-on-rails - 如何在 Ruby Net::FTP 中使用代理服务器?

标签 ruby-on-rails ruby proxy ftp net-ftp

我正在使用 Net::FTP ruby​​ 库连接到 FTP 服务器并下载文件。一切正常,但现在我需要使用出站代理,因为他们的防火墙将 IP 地址列入白名单,并且我正在使用 Heroku 来托管该站点。我正在试用新的 Proximo 附加组件,它看起来很有前途,但我无法让 Net::FTP 使用它。

我在 Net::FTP docs 中看到以下内容:

connect(host, port = FTP_PORT)

Establishes an FTP connection to host, optionally overriding the default port. If the environment variable SOCKS_SERVER is set, sets up the connection through a SOCKS proxy. Raises an exception (typically Errno::ECONNREFUSED) if the connection cannot be established.

但是尝试设置此环境变量,或设置 ENV['SOCKS_SERVER'] = proximo_url 也不起作用。有谁知道如何正确地做到这一点?它不一定是 SOCKS 代理,一个 HTTP 代理就可以,但我不确定 Net::FTP 库是否支持这个。

...经过一些研究...

我发现 Net::FTP 寻找一个名为 SOCKSSocket 的类,为此我找到了 these docs .但我不能包括它。 include 'socket' 返回 false,我很确定这意味着它已经加载。

最佳答案

您可以使用 socksify gem 与例如组合。配额守卫。不过,请确保使用提供的静态 IP 之一(而不是 DNS 主机名)作为代理服务器,因为 FTP 和负载平衡可能会导致麻烦。

Socksify::debug = true
proxy_uri = URI(ENV['QUOTAGUARDSTATIC_URL'])
proxy_hostname = proxy_uri.hostname
proxy_port = 1080
TCPSocket::socks_username = proxy_uri.user
TCPSocket::socks_password = proxy_uri.password
Socksify::proxy(proxy_hostname, proxy_port) do |soc| 
       Net::FTP.open(server) do |ftp|
            ftp.passive = true
            ftp.debug_mode = true 
            ftp.login user, password
            ftp.get(export, storelocation)
            ftp.close
       end
end

关于ruby-on-rails - 如何在 Ruby Net::FTP 中使用代理服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11680350/

相关文章:

ruby-on-rails - 尝试安装 cms 时 Bundler::GemfileNotFound

ruby-on-rails - 如何在 mongoid/rails 中获取一个字段?

html - IE8 代理 CSS 兼容性

ruby-on-rails - 删除 Rails 应用程序?

ruby-on-rails - 如何优雅地处理ActiveRecord中的 "Mysql2::Error: Invalid date"?

ruby-on-rails - 如果我们将参数缓存到操作中的本地变量中,它会有所帮助还是相同?

ruby - Capistrano 3.x 逐行捕获输出

python - 代理似乎被 Mechanize 忽略了?

php - 无法在代理后面的 Ubuntu 上安装 Composer

ruby-on-rails - 如何配置 Guard 来运行 Rails 5 系统测试?