ഓരോ ശ്രമവും ആ എൻഡ്പോയിന്റിനായി ക്രമീകരിച്ച ഒരു ക്ലയന്റ് സൃഷ്ടിക്കുമ്പോൾ മാത്രമേ പ്രോക്സികളുടെ പട്ടിക ഉപയോഗപ്രദമാകൂ. പ്രാമാണീകരണമില്ലാത്ത 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 ഉദാഹരണം ഏകപക്ഷീയ ഇടപാടുകളുടെ സുരക്ഷിത പുനരാവിഷ്കാരം വാഗ്ദാനം ചെയ്യുന്നില്ല.

അനുബന്ധ ലേഖനങ്ങൾ