ప్రతి ప్రయత్నం ఆ ఎండ్‌పాయింట్ కోసం కాన్ఫిగర్ చేసిన క్లయింట్‌ను సృష్టించినప్పుడే ప్రాక్సీ జాబితా ఉపయోగపడుతుంది. ప్రామాణీకరణ లేని 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 ఉదాహరణ ఏకపక్ష లావాదేవీల సురక్షిత పునఃప్రదర్శనకు హామీ ఇవ్వదు.

సంబంధిత వ్యాసాలు