Прокси үміткерлерін жеке 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 әлі де межелі орынды көрсетеді. Рұқсат етілген қоғамдық URL-ды аутентификациясыз HTTP соңғы нүктелері арқылы тексергенде мысалдағы екі жазбаны HTTP прокси тізімінен толтырыңыз. request_uri өз жолын және сұрауын сақтайды. Мысал қарапайым қосылу және оқу қателерін өңдейді және HTTP мәртебесі келгенде оны жазады.
Мұнда кез келген 2xx жауабы іздеуді аяқтайды. Егер операцияңыз басқа нәтиже күтсе, сол өлшемді анық белгілеңіз. Қайта бағыттау қалаған беттің алынғанын өздігінен дәлелдемейді.
Автоматты қайталауды әдіске сай ұстаңыз. Денесі жіберілгеннен кейін уақыты бітетін POST қашықтағы қолданбаны бұрын өзгерткен болуы мүмкін; басқа прокси арқылы қайталап көру сол әсерді қайталауы мүмкін. GET мысалы ерікті транзакциялардың қауіпсіз қайта ойнатылуына уәде бермейді.