Δοκιμάστε υποψήφια proxy με ξεχωριστούς πελάτες Ruby Net::HTTP
Δημιουργήστε ένα στιγμιότυπο Net::HTTP για κάθε υποψήφιο proxy και σταματήστε σύμφωνα με την απόκριση που χρειάζεται πραγματικά η λειτουργία σας.
Μια λίστα με proxy γίνεται χρήσιμη μόνο όταν κάθε προσπάθεια δημιουργεί έναν πελάτη ρυθμισμένο για αυτό το τελικό σημείο. Για ένα GET μέσω proxy 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Το τέταρτο όρισμα επιλέγει τη θύρα του proxy· τα uri.host και uri.port εξακολουθούν να δηλώνουν τον προορισμό. Συμπληρώστε τις δύο καταχωρήσεις του παραδείγματος από τη λίστα proxy HTTP όταν ελέγχετε μια επιτρεπόμενη δημόσια διεύθυνση URL μέσω τελικών σημείων HTTP χωρίς έλεγχο ταυτότητας. Το request_uri διατηρεί τη διαδρομή και το ερώτημα. Το παράδειγμα χειρίζεται συνήθη σφάλματα σύνδεσης και ανάγνωσης και καταγράφει κατάσταση HTTP όταν φτάσει μία.
Εδώ οποιαδήποτε απόκριση 2xx τερματίζει την αναζήτηση. Αν η λειτουργία σας περιμένει άλλο αποτέλεσμα, ορίστε ρητά αυτό το κριτήριο. Μια ανακατεύθυνση δεν αποδεικνύει αυτόματα ότι ανακτήθηκε η επιθυμητή σελίδα.
Κρατήστε την αυτόματη επανάληψη κατάλληλη για τη μέθοδο. Ένα POST που λήγει αφού σταλεί το σώμα του μπορεί να έχει ήδη αλλάξει την απομακρυσμένη εφαρμογή· μια νέα προσπάθεια μέσω άλλου proxy μπορεί να επαναλάβει αυτό το αποτέλεσμα. Το παράδειγμα GET δεν υπόσχεται ασφαλή επανάληψη αυθαίρετων συναλλαγών.