Lista proxyja postaje korisna tek kada svaki pokušaj stvori klijenta konfiguriranog za tu odredišnu tač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. Popunite dva primjera iz liste HTTP proxyja kada provjeravate dozvoljeni javni URL kroz HTTP tačke bez autentifikacije. request_uri zadržava svoju putanju i upit. Primjer obrađuje uobičajene greš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 definirajte izričito. 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 efekat. Primjer s GET-om ne obećava sigurno ponavljanje proizvoljnih transakcija.

Povezani članci