Proxy namizədlərini ayrı Ruby Net::HTTP müştəriləri ilə sınayın
Hər proxy namizədi üçün bir Net::HTTP nüsxəsi yaradın və əməliyyatınızın həqiqətən ehtiyac duyduğu cavaba görə dayanın.
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
endDö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.