Cuba calon proksi dengan klien Ruby Net::HTTP berasingan
Cipta satu instans Net::HTTP bagi setiap calon proksi dan berhenti mengikut respons yang benar-benar diperlukan oleh operasi anda.
Senarai proksi hanya berguna apabila setiap percubaan mencipta klien yang dikonfigurasikan untuk titik akhir itu. Untuk GET melalui proksi HTTP tanpa pengesahan, Net::HTTP boleh digunakan seperti ini:
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
endArgumen keempat memilih port proksi; uri.host dan uri.port masih menandakan destinasi. Isi kedua-dua entri contoh daripada senarai proksi HTTP apabila memeriksa URL awam yang dibenarkan melalui titik akhir HTTP tanpa pengesahan. request_uri mengekalkan laluan dan pertanyaannya. Contoh ini mengendalikan kegagalan sambungan dan bacaan biasa serta merekodkan status HTTP apabila ia tiba.
Di sini sebarang respons 2xx menamatkan carian. Jika operasi anda menjangkakan hasil lain, takrifkan kriteria itu secara eksplisit. Ubah hala tidak membuktikan secara automatik bahawa halaman yang dikehendaki telah diambil.
Kekalkan pengulangan automatik yang sesuai dengan kaedah. POST yang tamat masa selepas badannya dihantar mungkin sudah mengubah aplikasi jauh; mencubanya semula melalui proksi lain boleh mengulangi kesan itu. Contoh GET tidak menjanjikan main semula yang selamat bagi transaksi sewenang-wenangnya.