علیحدہ 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 مثال صوابدیدی لین دین کے محفوظ دوبارہ اجرا کا وعدہ نہیں کرتی۔