Περάστε μια κενή αντιστοίχιση στο ProxyHandler όταν ένα μόνο urllib opener πρέπει να συνδέεται απευθείας:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))

with direct.open("https://example.com/", timeout=10) as response:
    print(response.status)

Το κενό λεξικό δεν ορίζει διαδρομές proxy. Αν παραλείψετε την αντιστοίχιση, ο χειριστής εντοπίζει proxy από το περιβάλλον και τις ρυθμίσεις της πλατφόρμας. Αυτές οι δύο κατασκευές εκφράζουν διαφορετικές πολιτικές.

Το παράδειγμα χρησιμοποιεί την πρότυπη βιβλιοθήκη της Python και διατηρεί την κανονική επαλήθευση HTTPS. Το μπλοκ with κλείνει την απόκριση, ακόμη και όταν μια εξαίρεση οδηγεί σε έξοδο από το μπλοκ.

Απευθείας αιτήματα και αιτήματα μέσω proxy στην ίδια εφαρμογή

Δύο openers μπορούν να υλοποιούν τις δύο πολιτικές χωρίς αλλαγή μεταβλητών περιβάλλοντος μεταξύ κλήσεων:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}))

with proxied.open("https://example.com/", timeout=10) as response:
    print(response.status)

Αντικαταστήστε τη διεύθυνση loopback με τον δικό σας HTTP proxy ή επιλέξτε έναν υποψήφιο από τη λίστα HTTP proxy για τη σύγκριση μέσω proxy. Μπορεί να μεταφέρει τη σύνδεση στον στόχο HTTPS μέσω CONNECT, εφόσον το επιτρέπει η υπηρεσία. Το πρωτόκολλο και η υποστήριξη ελέγχου ταυτότητας του σημείου ακρόασης πρέπει να ταιριάζουν με τον χειριστή.

Μην αλλάζετε το προεπιλεγμένο opener

Καλέστε direct.open ή proxied.open μέσω του αντικειμένου που είναι υπεύθυνο για τη διαδρομή. Το install_opener αλλάζει την προεπιλογή ολόκληρης της διεργασίας που χρησιμοποιούν οι βοηθητικές κλήσεις του urllib· έτσι μια βιβλιοθήκη που το χρησιμοποιεί μπορεί να επηρεάσει άσχετο κώδικα. Δεν χρειάζεται για το απομονωμένο opener παραπάνω.

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

Αυτά τα αντικείμενα opener δεν αλλάζουν τον πελάτη άλλης βιβλιοθήκης, μια υπάρχουσα διεργασία ή τις ρυθμίσεις proxy ενός προγράμματος περιήγησης.

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