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í.

Súvisiace články