Правярайце кандыдатаў у проксі асобнымі кліентамі Ruby Net::HTTP
Стварайце адзін экзэмпляр Net::HTTP на кожнага кандыдата ў проксі і спыняйцеся паводле адказу, які патрэбны вашай аперацыі.
Спіс проксі становіцца карысным толькі тады, калі кожная спроба стварае кліента, настроенага на гэты адрас. Для GET праз HTTP-проксі без аўтэнтыфікацыі Net::HTTP можна ўжываць так:
require 'net/http'
uri = URI('https://www.example.com/status')
proxies = ['http://proxy-a.example:8080',
'http://proxy-b.example:8080']
proxies.each do |value|
proxy = URI(value)
http = Net::HTTP.new(uri.host, uri.port, proxy.host, proxy.port)
http.use_ssl = uri.scheme == 'https'
http.open_timeout = 5
http.read_timeout = 10
begin
response = http.get(uri.request_uri)
puts "#{proxy.host}:#{proxy.port} #{response.code}"
break if response.is_a?(Net::HTTPSuccess)
rescue Net::OpenTimeout, Net::ReadTimeout, SocketError, SystemCallError, IOError => error
warn "#{proxy.host}:#{proxy.port} #{error.class}"
end
endЧацвёрты аргумент выбірае порт проксі; uri.host і uri.port па-ранейшаму пазначаюць прызначэнне. Запоўніце два прыклады з спісу HTTP-проксі, калі правяраеце дазволены публічны URL праз HTTP-пункты без аўтэнтыфікацыі. request_uri захоўвае свой шлях і запыт. Прыклад апрацоўвае звычайныя памылкі злучэння і чытання і фіксуе HTTP-статус, калі ён прыходзіць.
Тут любы адказ 2xx спыняе пошук. Калі ваша аперацыя чакае іншы вынік, вызначце гэты крытэр яўна. Перанакіраванне не даказвае аўтаматычна, што патрэбная старонка была атрымана.
Трымайце аўтаматычнае паўтарэнне адпаведным метаду. POST, які скончыўся тайм-аўтам пасля адпраўкі цела, мог ужо змяніць аддаленую праграму; паўтор спробы праз іншае проксі можа паўтарыць гэты эфект. Прыклад з GET не абяцае бяспечнага паўтору адвольных транзакцый.