Một danh sách proxy chỉ trở nên hữu ích khi mỗi lần thử tạo ra một máy khách được cấu hình cho điểm cuối đó. Đối với GET qua các proxy HTTP không xác thực, có thể dùng Net::HTTP như sau:

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

Đối số thứ tư chọn cổng proxy; uri.host và uri.port vẫn chỉ ra đích đến. Hãy điền hai mục ví dụ từ danh sách proxy HTTP khi kiểm tra một URL công khai được phép qua các điểm cuối HTTP không xác thực. request_uri giữ nguyên đường dẫn và truy vấn. Ví dụ xử lý các lỗi kết nối và đọc thông thường và ghi lại trạng thái HTTP khi có một trạng thái đến.

Ở đây, bất kỳ phản hồi 2xx nào cũng kết thúc việc tìm kiếm. Nếu thao tác của bạn chờ một kết quả khác, hãy định nghĩa tiêu chí đó một cách rõ ràng. Chuyển hướng không tự động chứng minh rằng trang mong muốn đã được lấy về.

Giữ việc lặp tự động phù hợp với phương thức. Một POST hết thời gian sau khi đã gửi phần thân có thể đã thay đổi ứng dụng từ xa; thử lại qua proxy khác có thể lặp lại hiệu ứng đó. Ví dụ GET không hứa hẹn việc phát lại an toàn cho các giao dịch tùy ý.

Bài viết liên quan