Subukan ang mga kandidatong proxy gamit ang hiwalay na Ruby Net::HTTP client
Gumawa ng isang Net::HTTP instance para sa bawat kandidatong proxy at huminto ayon sa tugon na talagang kailangan ng iyong operasyon.
Nagiging kapaki-pakinabang lamang ang listahan ng proxy kapag ang bawat pagtatangka ay gumagawa ng client na naka-configure para sa endpoint na iyon. Para sa GET sa pamamagitan ng mga HTTP proxy na walang pagpapatunay, magagamit ang Net::HTTP nang ganito:
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
endPinipili ng ikaapat na argumento ang port ng proxy; tinutukoy pa rin ng uri.host at uri.port ang destinasyon. Punan ang dalawang halimbawang entry mula sa listahan ng HTTP proxy kapag sinusuri ang isang pinapayagang pampublikong URL sa pamamagitan ng mga HTTP endpoint na walang pagpapatunay. Pinapanatili ng request_uri ang landas at query nito. Hinahawakan ng halimbawa ang karaniwang pagkabigo sa koneksyon at pagbasa at nagtatala ng HTTP status kapag may dumating.
Dito tinatapos ng anumang 2xx na tugon ang paghahanap. Kung inaasahan ng iyong operasyon ang ibang resulta, tahasan mong tukuyin ang pamantayang iyon. Hindi awtomatikong pinapatunayan ng redirect na nakuha ang gustong pahina.
Panatilihing angkop sa method ang awtomatikong pag-uulit. Ang POST na nag-time out matapos maipadala ang katawan nito ay maaaring nabago na ang remote na application; ang muling pagsubok sa ibang proxy ay maaaring mag-ulit ng epektong iyon. Hindi nangangako ang halimbawang GET ng ligtas na muling pagpapatakbo ng mga arbitraryong transaksyon.