我正在编写一个Ruby脚本,它自动抓取网站进行数据分析,现在我有一个相当复杂的要求:我必须能够模拟来自各个国家/地区的访问,大约有20个不同的国家/地区。网站将根据IP位置包含不同的信息,因此完成此任务的唯一方法是从实际位于该国家/地区的服务器请求。
由于我不想在这20个国家/地区购买服务器,我选择尝试Tor - 正如许多人所知,通过编辑torrc配置文件,可以指定退出节点,因此实际请求所来自的国家。
当我手动执行此操作时,例如通过编辑torrc文件以使用阿根廷服务器,然后使用Vidalia断开Tor,重新连接Vidalia,然后重新运行请求,它工作正常。但是,我想完全自动化这个过程,并尽可能高效地完成。 Tor是用C语言编写的,我想避免为此分解整个源代码。知道什么是仅使用Ruby自动化整个过程的最简单方法?
此外,如果我遗漏了一些东西,并且有一个更简单的替代方案,请告诉我。
谢谢!
答案 0 :(得分:12)
请查看Tor控制协议。您可以使用telnet控制电路。 http://thesprawl.org/memdump/?entry=8
要切换到切换到新端点的新电路:
require 'net/telnet'
def switch_endpoint
localhost = Net::Telnet::new("Host" => "localhost", "Port" => "9051", "Timeout" => 10, "Prompt" => /250 OK\n/)
localhost.cmd('AUTHENTICATE ""') { |c| print c; throw "Cannot authenticate to Tor" if c != "250 OK\n" }
localhost.cmd('signal NEWNYM') { |c| print c; throw "Cannot switch Tor to new route" if c != "250 OK\n" }
localhost.close
end
请注意制作新电路的延迟,可能需要几秒钟,因此您最好在代码中添加延迟,或者通过调用某个远程IP检测站点来检查您的地址是否已更改。