En liste af proxies bliver først nyttig, når hvert forsøg opretter en klient, der er konfigureret til det endpoint. Til et GET gennem HTTP-proxies uden godkendelse kan Net::HTTP bruges sådan:

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

Det fjerde argument vælger proxyporten; uri.host og uri.port angiver stadig destinationen. Udfyld de to eksempelposter fra HTTP-proxylisten, når du tester en tilladt offentlig URL gennem HTTP-endpoints uden godkendelse. request_uri bevarer sin sti og forespørgsel. Eksemplet håndterer almindelige forbindelses- og læsefejl og registrerer en HTTP-status, når der kommer en.

Her afslutter ethvert 2xx-svar søgningen. Hvis din operation forventer et andet resultat, skal du definere det kriterium eksplicit. En omdirigering beviser ikke automatisk, at den ønskede side blev hentet.

Hold automatisk gentagelse passende til metoden. Et POST, der timer ud, efter at kroppen er sendt, kan allerede have ændret fjernapplikationen; et nyt forsøg gennem en anden proxy kan gentage den effekt. GET-eksemplet lover ikke sikker genafspilning af vilkårlige transaktioner.

Relaterede artikler