Je cherche un moyen d'utiliser différentes adresses IP pour chaque requête GET avec la bibliothèque Net :: HTTP standard. Le serveur a 5 adresses IP et suppose que certaines API bloquent l'accès lorsque la limite de demande par IP est atteinte. Donc, seul moyen de le faire - utilisez un autre serveur. Je ne peux rien trouver à ce sujet dans docs ruby.Existe-t-il un moyen de joindre la requête Ruby Net :: HTTP à une adresse IP/une interface réseau spécifique?
Par exemple, curl vous permet de l'attacher à l'adresse IP spécifique (en PHP):
$req = curl_init($url)
curl_setopt($req, CURLOPT_INTERFACE, 'ip.address.goes.here';
$result = curl_exec($req);
Est-il possible de le faire avec la bibliothèque Net :: HTTP? Comme alternative - CURB (liaison de rubis curl). Mais ce sera la dernière chose que j'essaierai.
Suggestions/Idées?
P.S. La solution avec TROTTOIR (avec des tests sales, ip`s remplacé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
ouais, j'ai aussi creusé dans le fichier http.rb pour trouver quelque chose qui pourrait être remplacé. bien, ça craint parce que je dois réécrire ma bibliothèque de demande de base .. de toute façon merci pour un conseil :) –
obtenu une solution de trottoir simple. va savoir si la performance est toujours la même. –
FYI pour quiconque rencontre cette réponse maintenant - cela a été corrigé. Non testé mais il semble que vous pouvez faire 'x = Net :: HTTP.new ('google.com'); x.local_host = '10 .0.0.1''. – twooster