Requests PreparedRequest i brakujące ustawienia środowiska
Zachowaj zgodność własnych przygotowanych żądań ze zwykłą obsługą proxy i CA w Requests, nie zakładając, że każdy niskopoziomowy send ignoruje proxy.
Żą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ł.