Una richiesta può funzionare tramite session.get() e fallire la verifica del certificato dopo essere stata riscritta come PreparedRequest. Il percorso send di basso livello non esegue la stessa fusione dell’ambiente del normale metodo 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)

Esegui la fusione con l’URL preparato finale, dopo le modifiche all’URL previste. Le decisioni su proxy ed esclusioni dipendono dalla destinazione, quindi impostazioni raccolte per un URL precedente possono essere sbagliate per la richiesta effettivamente inviata.

L’impostazione CA è facile da dimenticare

Con la normale fiducia nell’ambiente attiva, la fusione considera REQUESTS_CA_BUNDLE e il ripiego CURL_CA_BUNDLE quando la verifica non è stata sovrascritta esplicitamente. Chiamare send direttamente con verify predefinito non esegue questa ricerca CA. Disattivare la verifica nasconde la discrepanza invece di fornire l’archivio di certificati previsto.

Session.prepare_request() applica anche il comportamento di preparazione della sessione. Creare direttamente una richiesta con Request.prepare() è una scelta distinta; non aspettarti l’applicazione automatica dei cookie di sessione o di altre preparazioni della sessione.

I proxy hanno una regola più specifica

Sarebbe inesatto affermare che ogni PreparedRequest ignori le variabili d’ambiente proxy. In Requests 2.34.2, send risolve i proxy predefiniti quando manca l’argomento con nome proxies. Passare proxies={} a send salta proprio quel ramo di risoluzione.

Il dizionario vuoto passato a merge_environment_settings ha un ruolo diverso: la fusione può riempirlo con percorsi d’ambiente applicabili prima di inoltrarlo a send. Guardare solo il dizionario vuoto in due frammenti fa perdere i diversi metodi che lo ricevono.

Nel codice personalizzato di costruzione richieste, mantieni unite preparazione, fusione dell’ambiente e invio. Quando l’applicazione usa intenzionalmente trust_env=False, la fusione rispetta tale politica; non forza le impostazioni d’ambiente in un client che le ha disattivate deliberatamente.

Articoli correlati