Proxy siyahısı yalnız hər cəhd həmin son nöqtə üçün qurulmuş müştəri yaratdıqda faydalı olur. Kimlik təsdiqi olmayan HTTP proxyləri vasitəsilə GET üçün Net::HTTP belə istifadə edilə bilər:

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

Dördüncü arqument proxy portunu seçir; uri.host və uri.port hələ də təyinatı göstərir. İcazə verilmiş ictimai URL-i kimlik təsdiqi olmayan HTTP son nöqtələri ilə yoxlayarkən nümunədəki iki girişi HTTP proxy siyahısından doldurun. request_uri öz yolunu və sorğusunu saxlayır. Nümunə adi qoşulma və oxuma xətalarını idarə edir və HTTP statusu gəldikdə qeyd edir.

Burada istənilən 2xx cavabı axtarışı bitirir. Əməliyyatınız başqa nəticə gözləyirsə, həmin meyarı açıq şəkildə müəyyənləşdirin. Yönləndirmə istənilən səhifənin alındığını avtomatik sübut etmir.

Avtomatik təkrarı metoda uyğun saxlayın. Gövdəsi göndərildikdən sonra vaxtı bitən POST uzaq tətbiqi artıq dəyişmiş ola bilər; onu başqa proxy ilə yenidən sınamaq həmin təsiri təkrarlaya bilər. GET nümunəsi ixtiyari əməliyyatların təhlükəsiz təkrarına zəmanət vermir.

Əlaqəli məqalələr