Пробајте кандидати за прокси со одделни Ruby Net::HTTP клиенти
Создајте една инстанца Net::HTTP за секој кандидат за прокси и запрете според одговорот што вашата операција навистина и го треба.
Списокот со прокси станува корисен само кога секој обид создава клиент конфигуриран за таа крајна точка. За GET преку HTTP прокси без автентикација, 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 не ветува безбедно повторување на произволни трансакции.