רשימת פרוקסי נעשית שימושית רק כאשר כל ניסיון יוצר לקוח שמוגדר לנקודת הקצה הזו. עבור 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 אינה מבטיחה שידור חוזר בטוח של עסקאות שרירותיות.

מאמרים קשורים