Proksi nomzodlarini alohida Ruby Net::HTTP mijozlari bilan sinab ko'ring
Har bir proksi nomzodi uchun bitta Net::HTTP nusxasini yarating va amaliyotingizga haqiqatan kerak bo'lgan javobga qarab to'xtang.
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
endTo'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.