https://github.com/plusor/rest-tor
rest-tor 是一个基于 tor 的代理服务
它可以无限制的变更 IP 去请求目标服务器
目前只是测试版本,等有时间再优化
rest-tor 依赖于第三方 gem 有
Tor.request
Tor.request 类似于 RestClient::Request.execute, 接受的参数有:
method | 默认 get
urlpayloadheader 或 headers (默认的 User-Agent 会使用常量 Tor::USER_AGENT)mobile | 默认为 false, 如果为 true, 则使用移动端的 User-Agent
proxy 默认使用 tor 代理,如果为 false 则不使用代理。可以自定义代理如:proxy: 'http://127.0.0.1:8888'
raw 默认为 true, 结果等同于 Nokogiri::HTML(req.body), 如果为 false, 则返回 req.body
format | html, json, string 如果没有指定format则根据 raw 的值 true : html, false : string. 处理结果为对应的格式mode | 默认为 :default, 根据每个 tor实例请求成功 (RestClient 请求没报错的情况下) 的数量排序,选择成功数最高的那个实例。可选 :order, 根据端口号进行排序。可以自定义mode
Tor::Dispatcher.register :custom do
Tor.store.all.sort_by do |(port, tor)|
tor.c_success
end
end
Tor.request(url: '...', mode: :custom)
在调用Tor.request时,会占用 tor 实例,如果是多线程并发执行,且没有多余的 tor 实例可用,系统则会自动初始化一个新的实例。
Tor.init 会自动初始化 10 个 tor 实例.
Tor.stop(port) 关闭 tor
Tor.clear 关闭所有 tor
Tor.store.all 查看所有 tor
当 tor 实例失败次数到一定数量后,会自动重启 tor 实例,https://github.com/plusor/rest-tor/blob/master/lib/rest_tor/strategy/restart.rb
最后欢迎拍砖和贡献代码