Isprobajte kandidate za proxy s odvojenim Ruby Net::HTTP klijentima
Stvorite jednu instancu Net::HTTP za svakog kandidata za proxy i zaustavite se prema odgovoru koji vaša operacija doista treba.
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.