我正在使用 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/