Proxyjelöltek kipróbálása külön Ruby Net::HTTP kliensekkel
Hozzon létre egy Net::HTTP példányt proxyjelöltenként, és a műveletéhez ténylegesen szükséges válasz szerint álljon le.
A proxyk listája csak akkor válik hasznossá, ha minden kísérlet az adott végponthoz beállított klienst hoz létre. Hitelesítés nélküli HTTP-proxykon keresztüli GET esetén a Net::HTTP így használható:
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
endA negyedik argumentum a proxy portját választja; az uri.host és az uri.port továbbra is a célt jelöli. Töltse ki a példa két bejegyzését a HTTP-proxy listából, amikor egy engedélyezett nyilvános URL-t ellenőriz hitelesítés nélküli HTTP-végpontokon keresztül. A request_uri megőrzi az útvonalát és a lekérdezését. A példa kezeli a szokásos kapcsolódási és olvasási hibákat, és rögzít egy HTTP-státuszt, amikor az megérkezik.
Itt bármely 2xx válasz befejezi a keresést. Ha a művelete más eredményt vár, határozza meg ezt a feltételt kifejezetten. Az átirányítás nem bizonyítja automatikusan, hogy a kívánt oldal letöltődött.
Tartsa az automatikus ismétlést a metódushoz illően. Egy POST, amely a törzs elküldése után időtúllépést szenved, már megváltoztathatta a távoli alkalmazást; egy másik proxyn keresztüli újrapróbálkozás megismételheti ezt a hatást. A GET-példa nem ígér biztonságos újrajátszást tetszőleges tranzakciókhoz.