Popis proxyja postaje koristan tek kada svaki pokušaj stvori klijenta konfiguriranog za tu završnu točku. Za GET kroz HTTP proxije bez autentifikacije, Net::HTTP se može koristiti ovako:

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

Četvrti argument bira port proxyja; uri.host i uri.port i dalje označavaju odredište. Ispunite dva primjera iz popisa HTTP proxyja kada provjeravate dopušteni javni URL kroz HTTP točke bez autentifikacije. request_uri zadržava svoju stazu i upit. Primjer obrađuje uobičajene pogreške povezivanja i čitanja te bilježi HTTP status kada stigne.

Ovdje svaki odgovor 2xx završava pretragu. Ako vaša operacija očekuje drugi rezultat, taj kriterij izričito definirajte. Preusmjeravanje ne dokazuje automatski da je željena stranica dohvaćena.

Držite automatsko ponavljanje primjerenim metodi. POST koji istekne nakon što je tijelo poslano možda je već promijenio udaljenu aplikaciju; ponovni pokušaj kroz drugi proxy može ponoviti taj učinak. Primjer s GET-om ne obećava sigurno ponavljanje proizvoljnih transakcija.

Povezani članci