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
end

Argumen 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.

Artikel terkait