Proxy sąrašas tampa naudingas tik tada, kai kiekvienas bandymas sukuria tam galiniam taškui sukonfigūruotą klientą. Norint atlikti GET per neautentifikuotus HTTP proxy, Net::HTTP galima naudoti taip:

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

Ketvirtasis argumentas pasirenka proxy prievadą; uri.host ir uri.port vis dar nurodo paskirties vietą. Užpildykite du pavyzdinius įrašus iš HTTP proxy sąrašo, kai tikrinate leidžiamą viešą URL per neautentifikuotus HTTP galinius taškus. request_uri išsaugo savo kelią ir užklausą. Pavyzdys apdoroja įprastas prisijungimo ir skaitymo klaidas ir įrašo HTTP būseną, kai ji gaunama.

Čia bet koks 2xx atsakymas baigia paiešką. Jei jūsų operacija tikisi kito rezultato, aiškiai apibrėžkite tą kriterijų. Peradresavimas savaime neįrodo, kad norimas puslapis buvo gautas.

Laikykite automatinį kartojimą tinkamą metodui. POST, kurio laikas baigiasi išsiuntus turinį, galbūt jau pakeitė nuotolinę programą; bandymas dar kartą per kitą proxy gali pakartoti tą poveikį. GET pavyzdys nežada saugaus savavališkų transakcijų kartojimo.

Susiję straipsniai