Испробајте кандидате за прокси са одвојеним 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-ом не обећава сигурно понављање произвољних трансакција.