Requests PreparedRequest e axustes de contorno ausentes
Mantén as peticións preparadas propias coherentes coa xestión normal de proxys e CA de Requests, sen supoñer que todo send de baixo nivel ignora proxys.
Unha petición pode funcionar con session.get() e fallar na verificación do certificado tras reescribila como PreparedRequest. A vía send de baixo nivel non executa a mesma combinación de contorno que o método 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)
Combina usando o URL preparado final, despois dos cambios de URL previstos. As decisións de proxy e exclusión dependen do destino; os axustes obtidos para un URL anterior poden ser incorrectos para a petición realmente enviada.
O axuste CA é doado de esquecer
Coa confianza normal no contorno activada, a combinación considera REQUESTS_CA_BUNDLE e a súa alternativa CURL_CA_BUNDLE cando a verificación non se sobrescribiu expresamente. Chamar send directamente con verify predeterminado non fai esa consulta CA. Desactivar a verificación oculta a diferenza en vez de achegar o almacén de certificados previsto.
Session.prepare_request() tamén aplica o comportamento de preparación da sesión. Crear unha petición directamente con Request.prepare() é outra decisión; non esperes aplicación automática das cookies ou doutras preparacións da sesión.
Os proxys teñen unha regra máis concreta
Sería inexacto afirmar que toda PreparedRequest ignora as variables de contorno proxy. En Requests 2.34.2, send resolve os proxys predeterminados cando falta o argumento de palabra clave proxies. Pasar proxies={} a send omite esa rama concreta.
O dicionario baleiro pasado a merge_environment_settings ten outra función: a combinación pode enchelo con rutas de contorno aplicables antes de pasalo a send. Mirar só o dicionario baleiro en dous fragmentos oculta os distintos métodos que o reciben.
En código propio de construción de peticións, mantén xuntas a preparación, a combinación de contorno e o envío. Se a aplicación usa trust_env=False deliberadamente, a combinación respecta esa política; non forza axustes de contorno nun cliente que os desactivou expresamente.