我正在寻找一种方式来为每个GET请求使用不同的IP地址与标准的Net :: HTTP库。服务器有5个IP地址,并假设某些API在达到每个IP的请求限制时阻止访问。所以,只有这样做 - 使用另一台服务器。我无法在ruby文档中找到任何有关它的信息。有没有办法将Ruby Net :: HTTP请求附加到特定的IP地址/网络接口?
例如,卷曲允许您将它连接到指定的IP地址(PHP):
$req = curl_init($url)
curl_setopt($req, CURLOPT_INTERFACE, 'ip.address.goes.here';
$result = curl_exec($req);
有没有办法使用Net :: HTTP库办呢?作为替代 - CURB(红宝石卷曲绑定)。但这将是我将尝试的最后一件事。
建议/想法?
P.S.与遏制溶液(用肮脏的测试,ip`s被取代):
require 'rubygems'
require 'curb'
ip_addresses = [
'1.1.1.1',
'2.2.2.2',
'3.3.3.3',
'4.4.4.4',
'5.5.5.5'
]
ip_addresses.each do |address|
url = 'http://www.ip-adress.com/'
c = Curl::Easy.new(url)
c.interface = address
c.perform
ip = c.body_str.scan(/<h2>My IP address is: ([\d\.]{1,})<\/h2>/).first
puts "for #{address} got response: #{ip}"
end
是的,我也挖到http.rb文件找到有什么可能被重写。 好吧,这很糟糕,因为我不得不重写我的核心请求库。 无论如何感谢您的意见:) – 2010-06-09 23:49:18
得到了一个简单的路边解决方案。会发现性能是否仍然相同。 – 2010-06-10 00:46:13
仅供参考,现在有人遇到这个问题 - 这个问题已经解决。未经测试,但它看起来像你可以做'x = Net :: HTTP.new('google.com'); x.local_host = '10 .0.0.1''。 – twooster 2014-03-18 21:57:57