სცადეთ პროქსის კანდიდატები ცალკეული Ruby Net::HTTP კლიენტებით
შექმენით ერთი Net::HTTP ეგზემპლარი თითოეული პროქსის კანდიდატისთვის და შეჩერდით იმ პასუხის მიხედვით, რომელიც თქვენს ოპერაციას ნამდვილად სჭირდება.
პროქსების სია სასარგებლო ხდება მხოლოდ მაშინ, როცა ყოველი ცდა ქმნის ამ ბოლო წერტილისთვის კონფიგურირებულ კლიენტს. ავტორიზაციის გარეშე HTTP პროქსებით GET-ის შესასრულებლად Net::HTTP ასე გამოიყენება:
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მეოთხე არგუმენტი ირჩევს პროქსის პორტს; uri.host და uri.port კვლავ მიუთითებენ დანიშნულებაზე. შეავსეთ მაგალითის ორი ჩანაწერი HTTP პროქსების სიიდან, როცა ამოწმებთ დაშვებულ საჯარო URL-ს ავტორიზაციის გარეშე HTTP ბოლო წერტილებით. request_uri ინარჩუნებს თავის გზას და მოთხოვნას. მაგალითი ამუშავებს ჩვეულებრივი კავშირისა და კითხვის წარუმატებლობებს და აღრიცხავს HTTP სტატუსს, როცა ის მოვა.
აქ ნებისმიერი 2xx პასუხი ასრულებს ძიებას. თუ თქვენი ოპერაცია სხვა შედეგს ელოდება, ეს კრიტერიუმი ცხადად განსაზღვრეთ. გადამისამართება ავტომატურად არ ამტკიცებს, რომ სასურველი გვერდი მიღებულ იქნა.
შეინახეთ ავტომატური გამეორება მეთოდის შესაბამისად. POST, რომელსაც ვადა გასდის სხეულის გაგზავნის შემდეგ, შესაძლოა უკვე შეცვალა დისტანციური აპლიკაცია; სხვა პროქსით ხელახლა ცდამ შეიძლება გაიმეოროს ეს ეფექტი. GET მაგალითი არ გვპირდება თვითნებური ტრანზაქციების უსაფრთხო გამეორებას.