Прокси тизмеси ар бир аракет ошол акыркы чекитке ылайыкталган кардар түзгөндө гана пайдалуу болот. Аутентификациясыз 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 мисалы каалаган транзакцияларды коопсуз кайра аткарууга убада бербейт.

Тектеш макалалар