Seznam proxyjev postane uporaben šele, ko vsak poskus ustvari odjemalca, nastavljenega za to končno točko. Za GET prek neoverjenih proxyjev HTTP lahko Net::HTTP uporabite tako:

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

Četrti argument izbere vrata proxyja; uri.host in uri.port še vedno označujeta cilj. Izpolnite dva primera iz seznama proxyjev HTTP, ko preverjate dovoljeni javni URL prek neoverjenih končnih točk HTTP. request_uri ohrani svojo pot in poizvedbo. Primer obravnava običajne napake povezave in branja ter zabeleži status HTTP, ko pride.

Tu vsak odziv 2xx konča iskanje. Če vaša operacija pričakuje drug rezultat, to merilo izrecno določite. Preusmeritev sama po sebi ne dokazuje, da je bila želena stran pridobljena.

Samodejno ponavljanje prilagodite metodi. POST, ki mu pošteje čas po pošiljanju telesa, je morda že spremenil oddaljeno aplikacijo; nov poskus prek drugega proxyja lahko ta učinek ponovi. Primer GET ne obljublja varnega ponavljanja poljubnih transakcij.

Sorodni članki