Ruby,Tor和Net :: HTTP :: Proxy

如果这是一个无聊的怀疑,我提前道歉:我想在我的 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.txt中
forward-socks4a / 127.0.0.1:9050.

然后在脚本中使用privoxy认监听地址:

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连接,这意味着您根本不需要使用任何Proxy代码.

为了澄清你必须明白127.0.0.1:9050是Tor的SOCKS地址,127.0.0.1:8118是privoxy的地址.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...