Proksilar ro'yxati har bir urinish shu so'nggi nuqta uchun sozlangan mijoz yaratgandagina foydali bo'ladi. Autentifikatsiyasiz HTTP proksilari orqali GET qilish uchun Net::HTTP dan shunday foydalanish mumkin:

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

To'rtinchi argument proksi portini tanlaydi; uri.host va uri.port hali ham manzilni bildiradi. Autentifikatsiyasiz HTTP so'nggi nuqtalari orqali ruxsat etilgan ommaviy URL ni tekshirganda misoldagi ikkita yozuvni HTTP proksilar ro'yxatidan to'ldiring. request_uri o'z yo'li va so'rovini saqlaydi. Misol odatiy ulanish va o'qish xatolarini ko'rib chiqadi va HTTP holati kelganda qayd etadi.

Bu yerda har qanday 2xx javobi qidiruvni tugatadi. Agar amaliyotingiz boshqa natija kutsa, bu mezonni aniq belgilang. Qayta yo'naltirish kerakli sahifa olinganini o'z-o'zidan isbotlamaydi.

Avtomatik takrorni usulga mos tuting. Tanasi yuborilgandan keyin muddati o'tgan POST uzoqdagi ilovani allaqachon o'zgartirgan bo'lishi mumkin; boshqa proksi orqali qayta urinish bu ta'sirni takrorlashi mumkin. GET misoli ixtiyoriy tranzaksiyalarni xavfsiz qayta ijro etishga va'da bermaydi.

O'xshash maqolalar