Proxy adaylarını ayrı Ruby Net::HTTP istemcileriyle deneyin
Her proxy adayı için bir Net::HTTP örneği oluşturun ve işleminizin gerçekten ihtiyaç duyduğu yanıta göre durun.
Bir proxy listesi ancak her deneme o uç nokta için yapılandırılmış bir istemci oluşturduğunda işe yarar. Kimlik doğrulaması olmayan HTTP proxy'leri üzerinden GET için Net::HTTP şöyle kullanılabilir:
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ü argüman proxy bağlantı noktasını seçer; uri.host ve uri.port hâlâ hedefi belirtir. Kimlik doğrulaması olmayan HTTP uç noktaları üzerinden izin verilen bir genel URL'yi denetlerken örnekteki iki girdiyi HTTP proxy listesinden doldurun. request_uri yolunu ve sorgusunu korur. Örnek, olağan bağlantı ve okuma hatalarını ele alır ve bir HTTP durumu geldiğinde kaydeder.
Burada herhangi bir 2xx yanıtı aramayı bitirir. İşleminiz başka bir sonuç bekliyorsa bu ölçütü açıkça tanımlayın. Yönlendirme, istenen sayfanın alındığını kendiliğinden kanıtlamaz.
Otomatik yinelemeyi yönteme uygun tutun. Gövdesi gönderildikten sonra zaman aşımına uğrayan bir POST uzak uygulamayı çoktan değiştirmiş olabilir; başka bir proxy üzerinden yeniden denemek bu etkiyi yineleyebilir. GET örneği, rastgele işlemlerin güvenli biçimde yeniden oynatılmasını vaat etmez.