Requests PreparedRequest și setări de mediu lipsă
Păstrează cererile pregătite personalizate conforme cu gestionarea normală de proxy și CA a Requests, fără a presupune că orice send de nivel jos ignoră proxy-urile.
O cerere poate funcționa prin session.get() și eșua la verificarea certificatului după rescriere ca PreparedRequest. Calea send de nivel jos nu execută aceeași combinare a mediului ca metoda request normală.
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)
Combină folosind URL-ul pregătit final, după modificările intenționate ale URL-ului. Deciziile proxy și de ocolire depind de destinație, astfel că setările culese pentru un URL anterior pot fi greșite pentru cererea trimisă efectiv.
Setarea CA este ușor de omis
Cu încrederea normală în mediu activată, combinarea ține cont de REQUESTS_CA_BUNDLE și alternativa CURL_CA_BUNDLE când verificarea nu a fost suprascrisă explicit. Apelul direct send cu verify implicit nu face acea căutare CA. Dezactivarea verificării ascunde diferența în loc să ofere depozitul de certificate dorit.
Session.prepare_request() aplică și comportamentul de pregătire al sesiunii. Crearea directă cu Request.prepare() este o alegere separată; nu te aștepta la aplicarea automată a cookie-urilor de sesiune sau a altor pregătiri de sesiune.
Proxy-urile au o regulă mai exactă
Ar fi inexact să spui că orice PreparedRequest ignoră variabilele de mediu proxy. În Requests 2.34.2, send rezolvă proxy-urile implicite când lipsește argumentul numit proxies. Furnizarea proxies={} către send sare peste acea ramură precisă de rezolvare.
Dicționarul gol dat lui merge_environment_settings are alt rol: combinarea îl poate umple cu rute de mediu aplicabile înainte să ajungă la send. Dacă privești doar dicționarul gol din două exemple, ratezi metodele diferite care îl primesc.
În codul propriu de construire a cererilor, ține împreună pregătirea, combinarea mediului și trimiterea. Când aplicația folosește intenționat trust_env=False, combinarea respectă politica; nu impune setări de mediu unui client care le-a dezactivat deliberat.