വേറിട്ട 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 ഉദാഹരണം ഏകപക്ഷീയ ഇടപാടുകളുടെ സുരക്ഷിത പുനരാവിഷ്കാരം വാഗ്ദാനം ചെയ്യുന്നില്ല.