ทดลองผู้สมัครพร็อกซีด้วยไคลเอนต์ Ruby Net::HTTP แยกกัน
สร้าง Net::HTTP หนึ่งอินสแตนซ์ต่อผู้สมัครพร็อกซีหนึ่งราย และหยุดตามการตอบกลับที่งานของคุณต้องการจริง
รายการพร็อกซีจะมีประโยชน์ก็ต่อเมื่อแต่ละครั้งสร้างไคลเอนต์ที่กำหนดค่าสำหรับปลายทางนั้น สำหรับ GET ผ่านพร็อกซี HTTP ที่ไม่มีการพิสูจน์ตัวตน สามารถใช้ Net::HTTP ได้ดังนี้:
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อาร์กิวเมนต์ที่สี่เลือกพอร์ตพร็อกซี ส่วน uri.host และ uri.port ยังระบุปลายทางอยู่ เติมสองรายการตัวอย่างจากรายการพร็อกซี HTTP เมื่อตรวจสอบ URL สาธารณะที่อนุญาตผ่านปลายทาง HTTP ที่ไม่มีการพิสูจน์ตัวตน request_uri รักษาเส้นทางและคำค้นไว้ ตัวอย่างจัดการความล้มเหลวทั่วไปของการเชื่อมต่อและการอ่าน และบันทึกสถานะ HTTP เมื่อมีมา
ที่นี่การตอบกลับ 2xx ใดก็ตามจะยุติการค้นหา หากงานของคุณคาดหวังผลลัพธ์อื่น ให้กำหนดเกณฑ์นั้นอย่างชัดเจน การเปลี่ยนเส้นทางไม่ได้พิสูจน์โดยอัตโนมัติว่าได้หน้าที่ต้องการมาแล้ว
ให้การทำซ้ำอัตโนมัติเหมาะกับเมธอด POST ที่หมดเวลาหลังส่งเนื้อหาไปแล้วอาจเปลี่ยนแอปพลิเคชันปลายทางไปแล้ว การลองใหม่ผ่านพร็อกซีอื่นอาจทำให้ผลนั้นเกิดซ้ำ ตัวอย่าง GET ไม่ได้รับประกันการเล่นซ้ำธุรกรรมใด ๆ อย่างปลอดภัย