Есть ли способ присоединить Сеть Ruby:: Запрос HTTP к определенному IP-адресу / сетевой интерфейс?

Я смотрю, способ использовать различные IP-адреса для каждого ПОЛУЧАЕТ запрос со стандартной Сетью:: библиотека HTTP. Сервер имеет 5 IP-адресов и предполагая, что некоторый API блокирует доступ, когда предел запроса на IP достигнут. Так, только способ сделать это - использует другой сервер. Я ничего не могу найти об этом в рубиновых документах.

Например, завихрение позволяет Вам присоединять его к определенному IP-адресу (в PHP):

$req = curl_init($url)
curl_setopt($req, CURLOPT_INTERFACE, 'ip.address.goes.here';
$result = curl_exec($req);

Есть ли любой способ сделать это с Сетью:: библиотека HTTP? Как альтернатива - ОГРАНИЧЕНИЕ (рубиновая привязка завихрения). Но это будет последняя вещь, которую я попробую.

Предложения / Идеи?

P.S. Решение с ОГРАНИЧЕНИЕМ (с грязными тестами, тем, что 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
12
задан secretformula 26 May 2014 в 02:25
поделиться

1 ответ

Не похоже, что вы можете сделать это с помощью Net: HTTP. Вот источник

http://github.com/ruby/ruby/blob/trunk/lib/net/http.rb

В строке 644 открывается соединение

  s = timeout(@open_timeout) { TCPSocket.open(conn_address(), conn_port()) }

Третий и четвертый аргументы TCPSocket .open - это local_address и local_port, и поскольку они не указаны, это невозможно. Похоже, тебе придется ехать с бордюром.

1
ответ дан 2 December 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: