Orodha ya proksi huwa na maana tu pale kila jaribio linapounda mteja aliyesanidiwa kwa mwisho huo. Kwa GET kupitia proksi za HTTP zisizo na uthibitishaji, Net::HTTP inaweza kutumika hivi:

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

Hoja ya nne huchagua bandari ya proksi; uri.host na uri.port bado zinaonyesha lengwa. Jaza maingizo mawili ya mfano kutoka orodha ya proksi za HTTP unapokagua URL ya umma inayoruhusiwa kupitia vituo vya HTTP visivyo na uthibitishaji. request_uri huhifadhi njia na swali lake. Mfano hushughulikia hitilafu za kawaida za muunganisho na usomaji na hurekodi hali ya HTTP inapofika.

Hapa jibu lolote la 2xx humaliza utafutaji. Ikiwa operesheni yako inatarajia matokeo mengine, eleza kigezo hicho wazi. Uelekezaji upya hauthibitishi kiotomatiki kuwa ukurasa uliotaka umepatikana.

Weka urudiaji wa kiotomatiki ukiendana na mbinu. POST inayopitwa na muda baada ya mwili wake kutumwa huenda tayari imebadilisha programu ya mbali; kujaribu tena kupitia proksi nyingine kunaweza kurudia athari hiyo. Mfano wa GET hauahidi uchezaji upya salama wa miamala yoyote.

Makala zinazohusiana