වෙන වෙනම 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 උදාහරණය අත්තනෝමතික ගනුදෙනු ආරක්ෂිතව නැවත ධාවනය කරන බවට පොරොන්දු නොවේ.