Ruby、Tor 和 Net::HTTP::Proxy

标签 ruby proxy tor net-http

如果这是一个愚蠢的疑问,我提前道歉:我想在我的 Ruby 代码中使用代理来获取一些网页。我想偷偷摸摸!所以我正在使用 Tor。

我正在运行 Tor,我可以像往常一样使用 Net::HTTP.get(uri)。但我不知道如何使用 Net::HTTP::Proxy 来获取 uri。我也无法弄清楚使用 Tor 将如何帮助使我的抓取匿名。

非常感谢任何帮助。请不要只添加 link to the ruby-doc page for Net::HTTP::Proxy .如果我明白这一点,我就不会在这里问这个了:-)


另一种简单的方法是使用 SOCKSify ,但在这种情况下,我收到以下错误:

/usr/lib/ruby/gems/1.9.2-p290/gems/socksify-1.5.0/lib/socksify.rb:189:in 'socks_authenticate': SOCKS 版本不支持 (SOCKSError)

我以前从未做过任何网络编程。关于此的任何指导也将非常有帮助。谢谢:-)

最佳答案

您正在使用 HTTP 代理类,因此您必须提供 HTTP 代理的 IP。 Tor 浏览器没有捆绑了 HTTP 代理。

因此您可以安装一些代理软件,例如Privoxy并将其配置为使用 Tor 的 SOCKS:

config.txtforward-socks4a/127.0.0.1:9050 .

然后在脚本中使用 Privoxy 的默认 listen-address:

proxy = Net::HTTP::Proxy('127.0.0.1',8118)

使用 SOCKSify。 根据docs :

require 'socksify/http'
uri = URI.parse('http://rubyforge.org/')
Net::HTTP.SOCKSProxy('127.0.0.1', 9050).start(uri.host, uri.port) do |http|
  http.get(uri.path)
end

不需要额外的软件..

第三种解决方案是使用 SOCKSify,如下所示:

$ socksify_ruby localhost 9050 script.rb

重定向 Ruby 脚本的所有 TCP 连接,这意味着您根本不需要使用任何代理代码。

为了清楚起见,您必须了解 127.0.0.1:9050 是 Tor 的 SOCKS 地址,127.0.0.1:8118 是 Privoxy 的地址。

关于Ruby、Tor 和 Net::HTTP::Proxy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353544/

相关文章:

ruby - 在 sinatra 和 ruby​​ 中测试 Rack 超时

ruby-on-rails - 使用 simple_form 设计重定向并在失败时显示错误消息

java - 如何告诉代理服务器不要缓存响应?

linux - 如何在 Ubuntu 14.04 的终端上取消设置代理?

linux - 如何将 docker 容器连接到本地机器上的 Tor 代理?

delphi - 如何在不使用 Vidalia 的情况下强制 Tor 使用新身份?

javascript - 在 Javascript 中使用 Ruby 变量(在应用程序 View 中)

Ruby 系统参数

node.js - “npm install electron”也下载 Chrome 吗?

python - 如何在 Python 中通过 Tor 发出 urllib2 请求?