from urllib.request import ProxyHandler, build_opener

def make_proxy_opener(proxy_uri):
    return build_opener(ProxyHandler({
        "http": proxy_uri,
        "https": proxy_uri,
    }))

opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.

Καλέστε τη δική του μέθοδο open αυτού του opener όταν μια διαδρομή ανήκει στον έλεγχο. Το HTTP τελικό σημείο του παραδείγματος μπορεί να προέρχεται από την υπηρεσία σας ή από τη λίστα proxy HTTP για δημόσιους ελέγχους. Το απόσπασμα δείχνει την κυριότητα· δεν ορίζει την πλήρη πολιτική ελέγχου ταυτότητας ή υγείας. Κρατήστε τυχόν χειριστές ειδικούς για τον λογαριασμό συνδεδεμένους με τον προβλεπόμενο πελάτη.

Το urllib.request.install_opener() αλλάζει την προεπιλογή όλης της διεργασίας που χρησιμοποιούν οι μεταγενέστερες κλήσεις urlopen() σε επίπεδο module. Ένας ελεγκτής που διατρέχει proxies μπορεί επομένως να αφήσει άσχετα αιτήματα να χρησιμοποιούν το τελευταίο του τελικό σημείο. Η προσωρινή εγκατάσταση και η επαναφορά στον καθαρισμό εξακολουθούν να επιτρέπουν σε ταυτόχρονα αιτήματα να εκτελούνται κατά την κοινή αλλαγή.

Το socket.setdefaulttimeout() αλλάζει παρομοίως τις προεπιλογές για sockets που δημιουργούνται αργότερα. Χρησιμοποιήστε το χρονικό όριο σε επίπεδο λειτουργίας όταν μόνο ο έλεγχος πρέπει να το λάβει.

Κλείστε τις αποκρίσεις του ελέγχου και κρατήστε τα αποτελέσματά τους συγκεκριμένα: μια απόκριση σφάλματος HTTP δεν είναι αυτόματα νεκρός ακροατής proxy. Αν ένας σύγχρονος έλεγχος urllib χρησιμοποιείται σε ασύγχρονη υπηρεσία, μετακινήστε την εργασία που μπλοκάρει σε κατάλληλο worker· αυτή η απόφαση εκτέλεσης δεν κάνει την καθολική αλλαγή του opener απομονωμένη.

Ένας έλεγχος πρέπει να επιστρέφει την παρατήρησή του χωρίς να αφήνει άλλη πολιτική δικτύου πίσω. Το δικό του αντικείμενο πελάτη και η περιορισμένη λειτουργία κάνουν αυτό το όριο σαφές.

Σχετικά άρθρα