Provoni kandidatët e proxy me klientë Ruby Net::HTTP të veçantë
Krijoni një instancë Net::HTTP për çdo kandidat proxy dhe ndaloni sipas përgjigjes që operacioni juaj ka vërtet nevojë.
Një listë me proxy bëhet e dobishme vetëm kur çdo provë krijon një klient të konfiguruar për atë pikë fundore. Për një GET përmes proxy HTTP pa vërtetim, Net::HTTP mund të përdoret kështu:
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
endArgumenti i katërt zgjedh portën e proxy; uri.host dhe uri.port vazhdojnë të tregojnë destinacionin. Plotësoni dy hyrjet e shembullit nga lista e proxy HTTP kur kontrolloni një URL publike të lejuar përmes pikave fundore HTTP pa vërtetim. request_uri ruan shtegun dhe kërkesën e tij. Shembulli trajton dështimet e zakonshme të lidhjes dhe leximit dhe regjistron një status HTTP kur vjen një.
Këtu çdo përgjigje 2xx përfundon kërkimin. Nëse operacioni juaj pret një rezultat tjetër, përcaktoni qartë atë kriter. Një ridrejtim nuk vërteton automatikisht se faqja e dëshiruar u mor.
Mbajeni përsëritjen automatike të përshtatshme për metodën. Një POST që skadon pasi dërgohet trupi i tij mund të ketë ndryshuar tashmë aplikacionin në distancë; një provë e re përmes një proxy tjetër mund ta përsëritë atë efekt. Shembulli GET nuk premton riprodhim të sigurt të transaksioneve arbitrare.