प्रॉक्सीची यादी तेव्हाच उपयुक्त ठरते जेव्हा प्रत्येक प्रयत्न त्या एंडपॉइंटसाठी संरचित क्लायंट तयार करतो. प्रमाणीकरण नसलेल्या 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 उदाहरण अनियंत्रित व्यवहारांच्या सुरक्षित पुनरावृत्तीचे वचन देत नाही.

संबंधित लेख