Żądanie może działać przez session.get() i po przepisaniu na PreparedRequest nie przejść weryfikacji certyfikatu. Niskopoziomowa ścieżka send nie wykonuje tego samego scalania środowiska co zwykła metoda 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)

Scalaj z końcowym przygotowanym URL po planowanych zmianach URL. Decyzje o proxy i pomijaniu zależą od celu, więc ustawienia zebrane dla wcześniejszego URL mogą nie pasować do faktycznie wysyłanego żądania.

Ustawienie CA łatwo przeoczyć

Przy włączonym zwykłym zaufaniu do środowiska scalanie uwzględnia REQUESTS_CA_BUNDLE i zapasowe CURL_CA_BUNDLE, jeśli weryfikacja nie została jawnie nadpisana. Bezpośredni send z domyślnym verify nie wykonuje tego wyszukiwania CA. Wyłączenie weryfikacji ukrywa różnicę, zamiast dostarczyć zamierzony magazyn certyfikatów.

Session.prepare_request() stosuje także zachowanie przygotowania sesji. Bezpośrednie tworzenie żądania przez Request.prepare() to odrębny wybór; nie oczekuj automatycznego użycia ciasteczek sesji ani innych przygotowań sesji.

Proxy ma bardziej szczegółową regułę

Nieprecyzyjne byłoby stwierdzenie, że każdy PreparedRequest ignoruje zmienne środowiskowe proxy. W Requests 2.34.2 send ustala domyślne proxy, gdy brakuje argumentu nazwanego proxies. Przekazanie proxies={} do send pomija właśnie tę gałąź ustalania wartości domyślnych.

Pusty słownik przekazany do merge_environment_settings ma inną rolę: scalanie może wypełnić go odpowiednimi trasami środowiska przed przekazaniem do send. Patrzenie wyłącznie na pusty słownik w dwóch fragmentach pomija różne metody, które go otrzymują.

We własnym kodzie budowania żądań trzymaj razem przygotowanie, scalanie środowiska i wysyłanie. Gdy aplikacja celowo używa trust_env=False, scalanie respektuje tę politykę; nie wymusza środowiska na kliencie, który świadomie je wyłączył.

Powiązane artykuły