Prøv proxykandidatar med separate Ruby Net::HTTP-klientar
Opprett éin Net::HTTP-instans per proxykandidat og stopp etter svaret operasjonen din faktisk treng.
Ei liste med proxyar blir først nyttig når kvart forsøk opprettar ein klient som er konfigurert for det endepunktet. For eit GET gjennom HTTP-proxyar utan autentisering kan Net::HTTP brukast slik:
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 argumentet vel proxyporten; uri.host og uri.port viser framleis målet. Fyll ut dei to dømeoppføringane frå HTTP-proxylista når du sjekkar ein tillaten offentleg URL gjennom HTTP-endepunkt utan autentisering. request_uri held på banen og spørjinga si. Dømet handterer vanlege tilkoplings- og lesefeil og registrerer ein HTTP-status når ein kjem.
Her avsluttar eit kvar 2xx-svar søket. Viss operasjonen din ventar eit anna resultat, må du definere det kriteriet eksplisitt. Ei omdirigering beviser ikkje automatisk at den ønska sida vart henta.
Hald automatisk gjentaking høveleg for metoden. Eit POST som får tidsavbrot etter at kroppen er send, kan alt ha endra fjernapplikasjonen; eit nytt forsøk gjennom ein annan proxy kan gjenta den effekten. GET-dømet lovar ikkje trygg gjenavspeling av vilkårlege transaksjonar.