আলাদা 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 উদাহরণটি ইচ্ছেচ্ছা লেনদেনের নিরাপদ পুনরাবৃত্তির প্রতিশ্রুতি দেয় না।