छुट्टै 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 उदाहरणले स्वेच्छाचारी कारोबारको सुरक्षित पुनःप्लेको वाचा गर्दैन।