Prøv proxykandidater med separate Ruby Net::HTTP-klienter
Opret én Net::HTTP-instans pr. proxykandidat, og stop efter det svar, din operation faktisk har brug for.
En liste af proxies bliver først nyttig, når hvert forsøg opretter en klient, der er konfigureret til det endpoint. Til et GET gennem HTTP-proxies uden godkendelse kan Net::HTTP bruges sådan:
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
endDet fjerde argument vælger proxyporten; uri.host og uri.port angiver stadig destinationen. Udfyld de to eksempelposter fra HTTP-proxylisten, når du tester en tilladt offentlig URL gennem HTTP-endpoints uden godkendelse. request_uri bevarer sin sti og forespørgsel. Eksemplet håndterer almindelige forbindelses- og læsefejl og registrerer en HTTP-status, når der kommer en.
Her afslutter ethvert 2xx-svar søgningen. Hvis din operation forventer et andet resultat, skal du definere det kriterium eksplicit. En omdirigering beviser ikke automatisk, at den ønskede side blev hentet.
Hold automatisk gentagelse passende til metoden. Et POST, der timer ud, efter at kroppen er sendt, kan allerede have ændret fjernapplikationen; et nyt forsøg gennem en anden proxy kan gentage den effekt. GET-eksemplet lover ikke sikker genafspilning af vilkårlige transaktioner.