Ruby,Tor和Net :: HTTP :: Proxy

12

提前道歉如果这是一个新手疑问:我想在我的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 version not supported (SOCKSError)

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


给你一个链接,看看Net::HTTP::Proxy怎么样? - pguardiario
感谢指出。链接已添加在问题中。 - Chthonic Project
这是一个非常有趣的项目。我期待可能的解决方案。 - Jason Kim
你到底不明白什么?文档看起来很简单明了。 - pguardiario
当Tor浏览器运行时,我可以看到我的“表面”IP地址。由于这是我想要通过所有HTTP请求的地址,所以我执行proxy = Net::HTTP::Proxy('address.given.by.Tor',8080)...但是,当我执行proxy.start('www.google.com') { |http| <print the response code> }时,什么也没有发生。最终我不得不按Ctrl+C。 - Chthonic Project
1个回答

14

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

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

config.txt中  forward-socks4a / 127.0.0.1:9050 .

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

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

或者使用 SOCKSify。 根据文档

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的地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接