ପୃଥକ 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 ଉଦାହରଣ ମନଇଚ୍ଛା କାରବାରର ସୁରକ୍ଷିତ ପୁନଃପ୍ରସ୍ତୁତିର ପ୍ରତିଶ୍ରୁତି ଦିଏ ନାହିଁ।