我正在寻找一种方法,通过标准 Net::HTTP 库为每个 GET 请求使用不同的 IP 地址。服务器有 5 个 IP 地址,并假设当达到每个 IP 的请求限制时,某些 API 会阻止访问。因此,唯一的方法是使用另一台服务器。我在 ruby 文档中找不到任何有关它的信息。
例如,curl 允许您将其附加到特定的 IP 地址(在 PHP 中):
$req = curl_init($url)
curl_setopt($req, CURLOPT_INTERFACE, 'ip.address.goes.here';
$result = curl_exec($req);
有什么方法可以使用 Net::HTTP 库来做到这一点吗?作为替代方案 - CURB(红宝石卷曲绑定)。但这将是我尝试的最后一件事。
建议/想法?
附: CURB 的解决方案(脏测试,ip 被替换):
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 = Net::HTTP.new(uri.host, uri.port)
http.local_host = ip
response = http.request(request)
请注意,我不相信您可以使用 Net::HTTP.start,因为它不接受 local_host 作为选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)