Ένα αίτημα μπορεί να λειτουργεί μέσω 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, η συγχώνευση σέβεται την πολιτική· δεν επιβάλλει περιβάλλον σε πελάτη που το απενεργοποίησε συνειδητά.

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