Puhverserverite loend muutub kasulikuks alles siis, kui iga katse loob selle lõpp-punkti jaoks seadistatud kliendi. Autentimata HTTP-puhverserverite kaudu GET-i tegemiseks saab Net::HTTP-d kasutada nii:

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

Neljas argument valib puhverserveri pordi; uri.host ja uri.port tähistavad endiselt sihtkohta. Täida kaks näidisrida HTTP-puhverserverite loendist, kui kontrollid lubatud avalikku URL-i autentimata HTTP-lõpp-punktide kaudu. request_uri säilitab oma tee ja päringu. Näide käsitleb tavapäraseid ühendus- ja lugemisvigu ning märgib HTTP oleku, kui see saabub.

Siin lõpetab iga 2xx vastus otsingu. Kui sinu toiming ootab teistsugust tulemust, määratle see kriteerium selgelt. Ümbersuunamine ei tõesta automaatselt, et soovitud leht on hangitud.

Hoia automaatne kordamine meetodile sobiv. POST, mis aegub pärast keha saatmist, võib olla kaugrakendust juba muutnud; uus katse teise puhverserveri kaudu võib selle mõju korrata. GET-i näide ei luba suvaliste tehingute turvalist kordamist.

Seotud artiklid