Requests PreparedRequest i configuració d’entorn absent
Mantén les peticions preparades pròpies coherents amb la gestió normal de proxys i CA de Requests, sense suposar que cada send de baix nivell ignora proxys.
Una petició pot funcionar amb session.get() i fallar en la verificació del certificat després de reescriure-la com a PreparedRequest. La via send de baix nivell no executa la mateixa fusió de l’entorn que el mètode 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)
Fusiona utilitzant l’URL preparat final, després dels canvis d’URL previstos. Les decisions de proxy i exclusió depenen del destí; la configuració recollida per a un URL anterior pot ser incorrecta per a la petició que realment envies.
La configuració CA és fàcil d’oblidar
Amb la confiança normal en l’entorn activada, la fusió considera REQUESTS_CA_BUNDLE i la seva alternativa CURL_CA_BUNDLE quan no s’ha sobreescrit expressament la verificació. Cridar send directament amb verify per defecte no fa aquesta consulta CA. Desactivar la verificació amaga la diferència en lloc de proporcionar el magatzem de certificats previst.
Session.prepare_request() també aplica el comportament de preparació de la sessió. Crear directament una petició amb Request.prepare() és una elecció diferent; no esperis que hi apliqui automàticament galetes de sessió o altres preparacions de sessió.
Els proxys tenen una regla més concreta
Seria inexacte dir que totes les PreparedRequest ignoren les variables d’entorn de proxy. A Requests 2.34.2, send resol els valors proxy per defecte quan no hi ha l’argument de paraula clau proxies. Passar proxies={} a send omet aquella branca concreta de resolució.
El diccionari buit passat a merge_environment_settings té una funció diferent: la fusió el pot omplir de rutes d’entorn aplicables abans de passar-lo a send. Mirar només la presència d’un diccionari buit en dos fragments fa perdre de vista els mètodes diferents que el reben.
En codi propi de construcció de peticions, mantén juntes la preparació, la fusió d’entorn i l’enviament. Si l’aplicació utilitza trust_env=False deliberadament, la fusió respecta aquesta política; no força la configuració d’entorn en un client que l’ha desactivada expressament.