Požiadavka môže fungovať cez session.get() a po prepísaní na PreparedRequest zlyhať pri overovaní certifikátu. Nízkoúrovňová cesta send nevykonáva rovnaké zlúčenie prostredia ako bežná metóda 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)

Zlučujte s konečným pripraveným URL po plánovaných zmenách. Rozhodovanie o proxy a obchádzaní závisí od cieľa, takže nastavenia získané pre skoršie URL môžu byť pre skutočne odoslanú požiadavku nesprávne.

Nastavenie CA sa ľahko prehliadne

Pri bežne zapnutej dôvere v prostredie zlúčenie zohľadní REQUESTS_CA_BUNDLE a náhradné CURL_CA_BUNDLE, ak nebolo overovanie výslovne prepísané. Priame volanie send s predvoleným verify toto CA nezisťuje. Vypnutie overovania rozdiel skryje namiesto dodania zamýšľaného úložiska certifikátov.

Session.prepare_request() uplatňuje aj prípravné správanie relácie. Priame vytvorenie požiadavky cez Request.prepare() je iná voľba; neočakávajte automatické použitie cookies relácie alebo inej prípravy relácie.

Proxy majú konkrétnejšie pravidlo

Bolo by nepresné tvrdiť, že každý PreparedRequest ignoruje premenné prostredia proxy. V Requests 2.34.2 send určuje predvolené proxy, ak chýba kľúčový argument proxies. Odovzdanie proxies={} do send preskočí túto konkrétnu vetvu určenia predvolených hodnôt.

Prázdny slovník odovzdaný do merge_environment_settings má inú úlohu: zlúčenie ho môže naplniť vhodnými trasami prostredia pred odovzdaním do send. Samotný výskyt prázdneho slovníka v dvoch ukážkach zakrýva rôzne prijímajúce metódy.

Vo vlastnom kóde na zostavovanie požiadaviek držte prípravu, zlúčenie prostredia a odoslanie spolu. Keď aplikácia zámerne používa trust_env=False, zlúčenie túto politiku rešpektuje; nie je to spôsob vnútenia prostredia klientovi, ktorý ho úmyselne vypol.

Súvisiace články