Vyzkoušejte kandidáty proxy s oddělenými klienty Ruby Net::HTTP
Vytvořte jednu instanci Net::HTTP pro každého kandidáta proxy a zastavte podle odpovědi, kterou vaše operace skutečně potřebuje.
Seznam proxy je užitečný teprve tehdy, když každý pokus vytvoří klienta nakonfigurovaného pro daný koncový bod. Pro GET přes neautentizované HTTP proxy lze Net::HTTP použít 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 volí port proxy; uri.host a uri.port stále určují cíl. Doplňte obě ukázkové položky ze seznamu HTTP proxy, když ověřujete povolenou veřejnou URL přes neautentizované HTTP koncové body. request_uri zachovává svou cestu a dotaz. Ukázka ošetřuje běžné chyby připojení a čtení a zaznamená stav HTTP, když dorazí.
Zde jakákoli odpověď 2xx ukončí hledání. Pokud vaše operace očekává jiný výsledek, tento kritérium výslovně definujte. Přesměrování samo o sobě nedokazuje, že požadovaná stránka byla získána.
Automatické opakování přizpůsobte metodě. POST, který vyprší po odeslání těla, už mohl vzdálenou aplikaci změnit; další pokus přes jinou proxy může tento účinek zopakovat. Ukázka s GET neslibuje bezpečné opakování libovolných transakcí.