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
end

Argumenti 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.

Artikuj të ngjashëm