Szukam sposobu na użycie różnych adresów IP dla każdego żądania GET przy użyciu standardowej biblioteki Net :: HTTP. Serwer ma 5 adresów IP i zakłada, że niektóre interfejsy API blokują dostęp, gdy zostanie osiągnięty limit żądań na IP. Tak więc, jedyny sposób, aby to zrobić - użyj innego serwera. Nie mogę znaleźć niczego na ten temat w rubinowych dokumentach.Czy istnieje sposób dołączenia żądania Ruby Net :: HTTP do określonego adresu IP/interfejsu sieciowego?
Na przykład, curl pozwala na przymocowanie go do konkretnego adresu IP (w PHP):
$req = curl_init($url)
curl_setopt($req, CURLOPT_INTERFACE, 'ip.address.goes.here';
$result = curl_exec($req);
Czy istnieje jakiś sposób, aby to zrobić z biblioteki Net :: HTTP? Jako alternatywa - CURB (wiązanie ruby curl). Ale to będzie ostatnia rzecz, którą spróbuję.
Sugestie/Pomysły?
P.S. Rozwiązanie z krawężnika (z brudnych testów ip`s zastępowane):
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
tak, również wykopałem w pliku http.rb, aby znaleźć coś, co mogłoby zostać przesłonięte. Cóż, to jest do bani, ponieważ muszę przepisać moją główną bibliotekę żądań .. mimo to dziękuję za poradę :) –
dostałem proste rozwiązanie krawężnika. dowie się, czy wydajność nadal jest taka sama. –
FYI dla każdego, kto przejdzie teraz tę odpowiedź - zostało to naprawione. Niewygodne, ale wygląda na to, że możesz zrobić "x = Net :: HTTP.new (" google.com "); x.local_host = '10 .0.0.1''. – twooster