Provu proksiajn kandidatojn per apartaj Ruby Net::HTTP klientoj
Kreu unu Net::HTTP-n okazon por ĉiu proksia kandidato kaj haltu laŭ la respondo, kiun via operacio vere bezonas.
Listo de proksioj utilas nur tiam, kiam ĉiu provo kreas klienton agorditan por tiu finpunkto. Por GET tra senajtentikaj HTTP-proksioj, Net::HTTP uzeblas jene:
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
endLa kvara argumento elektas la proksian pordon; uri.host kaj uri.port daŭre indikas la celon. Plenigu la du ekzemplajn erojn el la HTTP-proksia listo kiam vi kontrolas permesatan publikan URL-on tra senajtentikaj HTTP-finpunktoj. request_uri konservas sian vojon kaj demando. La ekzemplo traktas ordinarajn konektajn kaj legajn malsukcesojn kaj notas HTTP-staton kiam ĝi alvenas.
Ĉi tie ajna respondo 2xx finas la serĉadon. Se via operacio atendas alian rezulton, difinu tiun kriterion eksplicite. Alidirektado ne pruvas aŭtomate ke la dezirata paĝo estis akirita.
Tenu aŭtomatan ripeton taŭga por la metodo. POST kiu tempolimas post kiam ĝia korpo estis sendita eble jam ŝanĝis la malproksiman aplikaĵon; reprovi tra alia proksio povus ripeti tiun efikon. La GET-ekzemplo ne promesas sekuran ripeton de arbitraj transakcioj.