અલગ 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 ઉદાહરણ મનસ્વી વ્યવહારોના સુરક્ષિત પુનરાવર્તનનું વચન આપતું નથી.