የፕሮክሲ እጩዎችን በተለያዩ የ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 ምሳሌ የዘፈቀደ ግብይቶችን በአስተማማኝ ሁኔታ እንደገና ማስጫወት አይገልጽም።