Uji kandidat proxy dengan klien Ruby Net::HTTP terpisah
Buat satu instans Net::HTTP untuk setiap kandidat proxy dan berhenti sesuai respons yang benar-benar dibutuhkan operasi Anda.
Daftar proxy baru berguna ketika setiap percobaan membuat klien yang dikonfigurasi untuk titik akhir itu. Untuk GET melalui proxy HTTP tanpa autentikasi, Net::HTTP dapat 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 proxy; uri.host dan uri.port tetap menandai tujuan. Isi kedua entri contoh dari daftar proxy HTTP saat memeriksa URL publik yang diizinkan melalui titik akhir HTTP tanpa autentikasi. request_uri mempertahankan jalur dan kuerinya. Contoh ini menangani kegagalan koneksi dan pembacaan biasa serta mencatat status HTTP saat status itu datang.
Di sini respons 2xx apa pun mengakhiri pencarian. Jika operasi Anda mengharapkan hasil lain, tetapkan kriteria itu secara eksplisit. Pengalihan tidak otomatis membuktikan bahwa halaman yang diinginkan telah diambil.
Jaga pengulangan otomatis tetap sesuai dengan metode. POST yang habis waktu setelah bodinya dikirim mungkin sudah mengubah aplikasi jarak jauh; mencobanya lagi melalui proxy lain dapat mengulangi efek itu. Contoh GET tidak menjanjikan pengulangan aman untuk transaksi sembarang.