En liste med proxyer blir først nyttig når hvert forsøk oppretter en klient som er konfigurert for det endepunktet. For et GET gjennom HTTP-proxyer uten autentisering kan Net::HTTP brukes slik:

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 argumentet velger proxyporten; uri.host og uri.port angir fortsatt målet. Fyll ut de to eksempeloppføringene fra HTTP-proxylisten når du sjekker en tillatt offentlig URL gjennom HTTP-endepunkter uten autentisering. request_uri beholder banen og spørringen sin. Eksempelet håndterer vanlige tilkoblings- og lesefeil og registrerer en HTTP-status når en kommer.

Her avslutter ethvert 2xx-svar søket. Hvis operasjonen din forventer et annet resultat, må du definere det kriteriet eksplisitt. En omdirigering beviser ikke automatisk at den ønskede siden ble hentet.

Hold automatisk gjentakelse passende for metoden. Et POST som tidsavbrytes etter at kroppen er sendt, kan allerede ha endret fjernapplikasjonen; et nytt forsøk gjennom en annen proxy kan gjenta den effekten. GET-eksempelet lover ikke sikker gjenavspilling av vilkårlige transaksjoner.

Relaterte artikler