Requests PreparedRequest και ελλείπουσες ρυθμίσεις περιβάλλοντος
Κρατήστε τις προσαρμοσμένες προετοιμασμένες αιτήσεις συνεπείς με τον κανονικό χειρισμό proxy και CA του Requests χωρίς να θεωρείτε ότι κάθε χαμηλού επιπέδου send αγνοεί proxy.
Ένα αίτημα μπορεί να λειτουργεί μέσω session.get() και να αποτυγχάνει στην επαλήθευση πιστοποιητικού μετά την επανεγγραφή ως PreparedRequest. Η διαδρομή send χαμηλού επιπέδου δεν εκτελεί την ίδια συγχώνευση περιβάλλοντος με την κανονική μέθοδο request.
import requests
with requests.Session() as session:
request = requests.Request("GET", "https://example.com/")
prepared = session.prepare_request(request)
settings = session.merge_environment_settings(
prepared.url, {}, None, None, None
)
response = session.send(
prepared,
timeout=(5, 15),
**settings,
)
response.raise_for_status()
print(response.status_code)
Συγχωνεύστε με το τελικό προετοιμασμένο URL μετά τις προβλεπόμενες αλλαγές. Οι αποφάσεις proxy και παράκαμψης εξαρτώνται από τον προορισμό, επομένως ρυθμίσεις για παλιότερο URL μπορεί να είναι λάθος για το πραγματικό αίτημα.
Η ρύθμιση CA παραβλέπεται εύκολα
Με ενεργή κανονική εμπιστοσύνη στο περιβάλλον, η συγχώνευση λαμβάνει υπόψη REQUESTS_CA_BUNDLE και την εφεδρεία CURL_CA_BUNDLE όταν η επαλήθευση δεν έχει παρακαμφθεί ρητά. Η άμεση κλήση send με προεπιλεγμένο verify δεν κάνει αυτή την αναζήτηση CA. Η απενεργοποίηση επαλήθευσης κρύβει τη διαφορά αντί να παρέχει την επιθυμητή αποθήκη πιστοποιητικών.
Το Session.prepare_request() εφαρμόζει και τη συμπεριφορά προετοιμασίας της συνεδρίας. Η άμεση δημιουργία με Request.prepare() είναι ξεχωριστή επιλογή· μην περιμένετε αυτόματη εφαρμογή cookie συνεδρίας ή άλλης προετοιμασίας της.
Τα proxy έχουν πιο συγκεκριμένο κανόνα
Θα ήταν ανακριβές να πούμε ότι κάθε PreparedRequest αγνοεί μεταβλητές περιβάλλοντος proxy. Στο Requests 2.34.2, το send επιλύει προεπιλογές proxy όταν απουσιάζει το όρισμα λέξης-κλειδιού proxies. Η παροχή proxies={} στο send παρακάμπτει ακριβώς εκείνον τον κλάδο προεπιλογών.
Το κενό λεξικό στο merge_environment_settings έχει διαφορετικό ρόλο: η συγχώνευση μπορεί να το γεμίσει με εφαρμόσιμες διαδρομές περιβάλλοντος πριν το δώσει στο send. Η παρατήρηση μόνο ενός κενού λεξικού σε δύο αποσπάσματα χάνει τις διαφορετικές μεθόδους που το δέχονται.
Σε δικό σας κώδικα κατασκευής αιτημάτων, κρατήστε μαζί προετοιμασία, συγχώνευση περιβάλλοντος και αποστολή. Όταν η εφαρμογή χρησιμοποιεί σκόπιμα trust_env=False, η συγχώνευση σέβεται την πολιτική· δεν επιβάλλει περιβάλλον σε πελάτη που το απενεργοποίησε συνειδητά.