Sto cercando un modo per utilizzare indirizzi IP diversi per ogni richiesta GET con la libreria Net :: HTTP standard. Il server ha 5 indirizzi IP e presuppone che alcune API stiano bloccando l'accesso quando viene raggiunto il limite di richieste per IP. Quindi, l'unico modo per farlo - usa un altro server. Non riesco a trovare nulla in ruby docs.C'è un modo per allegare la richiesta Ruby Net :: HTTP a uno specifico indirizzo IP/interfaccia di rete?
Per esempio, l'arricciatura consente di collegarlo a specifici indirizzi IP (in PHP):
$req = curl_init($url)
curl_setopt($req, CURLOPT_INTERFACE, 'ip.address.goes.here';
$result = curl_exec($req);
Esiste un modo per farlo con la biblioteca :: HTTP Net? In alternativa: CURB (rilegatura a ricciolo rosso rubino). Ma sarà l'ultima cosa che proverò.
Suggerimenti/idee?
P.S. La soluzione con CURB (con i test sporchi, ip`s essere sostituito):
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
sì, ho anche scavato nel file http.rb per trovare c'è qualcosa che potrebbe essere annullato. beh, questo fa schifo perché devo riscrivere la mia libreria di richieste di base .. comunque grazie per un consiglio :) –
ha ottenuto una soluzione semplice. scopriremo se la performance è sempre la stessa. –
FYI per chiunque incontri questa risposta ora - questo è stato risolto. Non testato, ma sembra che tu possa fare 'x = Net :: HTTP.new ('google.com'); x.local_host = '10 .0.0.1''. – twooster