Vyskúšajte kandidátov proxy s oddelenými klientmi Ruby Net::HTTP
Vytvorte jednu inštanciu Net::HTTP pre každého kandidáta proxy a zastavte podľa odpovede, ktorú vaša operácia skutočne potrebuje.
Zoznam proxy je užitočný až vtedy, keď každý pokus vytvorí klienta nakonfigurovaného pre daný koncový bod. Pre GET cez neautentizované HTTP proxy možno Net::HTTP použiť takto:
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Štvrtý argument vyberá port proxy; uri.host a uri.port stále určujú cieľ. Doplňte obe ukážkové položky zo zoznamu HTTP proxy, keď overujete povolenú verejnú URL cez neautentizované HTTP koncové body. request_uri zachováva svoju cestu a dopyt. Ukážka ošetruje bežné chyby pripojenia a čítania a zaznamená stav HTTP, keď príde.
Tu každá odpoveď 2xx ukončí hľadanie. Ak vaša operácia očakáva iný výsledok, tento kritérium výslovne definujte. Presmerovanie samo o sebe nedokazuje, že požadovaná stránka bola získaná.
Automatické opakovanie prispôsobte metóde. POST, ktorý vyprší po odoslaní tela, už mohol vzdialenú aplikáciu zmeniť; ďalší pokus cez inú proxy môže tento účinok zopakovať. Ukážka s GET nesľubuje bezpečné opakovanie ľubovoľných transakcií.