我正在编写一个 Ruby 脚本,它会自动抓取网站进行数据分析,现在我有一个相当复杂的需求:我必须能够模拟来自多个国家(大约 20 个不同国家)的访问。该网站将根据 IP 位置包含不同的信息,因此完成该操作的唯一方法是从实际位于该国家/地区的服务器请求该信息。
由于我不想在这 20 个国家/地区中的每一个国家/地区购买服务器,因此我选择尝试一下 Tor - 正如你们许多人所知,通过编辑 torrc 配置文件,可以指定退出节点,从而指定来自的国家/地区实际请求将发起。
当我手动执行此操作时,例如通过编辑 torrc 文件以使用阿根廷服务器,然后使用 Vidalia 断开 Tor 的连接,重新连接 Vidalia,然后重新运行请求,它可以正常工作。然而,我想完全自动化这个过程,并尽可能高效地完成。 Tor 是用 C 语言编写的,我想避免为此分解它的整个源代码。您知道仅使用 Ruby 实现整个流程自动化的最简单方法是什么吗?
另外,如果我遗漏了一些东西,并且有一个更简单的替代方案可以替代整个痛苦,请告诉我。
Thanks!
请查看 Tor 控制协议。您可以使用 telnet 控制电路。http://thesprawl.org/memdump/?entry=8 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 检测站点来检查您的地址是否已更改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)