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

Повезани чланци