Požadavek může fungovat přes session.get() a po přepsání na PreparedRequest selhat při ověřování certifikátu. Nízkoúrovňová cesta send neprovádí stejné sloučení prostředí jako běžná metoda 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)

Sloučení provádějte s konečným připraveným URL po zamýšlených změnách. Rozhodování o proxy a obcházení závisí na cíli, takže nastavení získané pro dřívější URL může být pro skutečně odeslaný požadavek chybné.

Nastavení CA se snadno přehlédne

Při běžně zapnuté důvěře v prostředí sloučení zohlední REQUESTS_CA_BUNDLE a náhradní CURL_CA_BUNDLE, pokud nebylo ověřování výslovně přepsáno. Přímé volání send s výchozím verify tuto CA nezjišťuje. Vypnutí ověřování rozdíl skryje místo dodání zamýšleného úložiště certifikátů.

Session.prepare_request() uplatňuje i přípravné chování relace. Přímé vytvoření požadavku přes Request.prepare() je jiná volba; neočekávejte automatické použití cookies relace nebo jiné přípravy relace.

Proxy mají konkrétnější pravidlo

Bylo by nepřesné tvrdit, že každý PreparedRequest ignoruje proměnné prostředí proxy. V Requests 2.34.2 send určuje výchozí proxy, pokud chybí klíčový argument proxies. Předání proxies={} do send přeskočí tuto konkrétní větev určení výchozích hodnot.

Prázdný slovník předaný do merge_environment_settings má jinou roli: sloučení jej může naplnit vhodnými trasami z prostředí před předáním do send. Pouhý výskyt prázdného slovníku ve dvou ukázkách zastírá různé metody, které jej přijímají.

Ve vlastním kódu pro sestavování požadavků držte přípravu, sloučení prostředí a odeslání pohromadě. Když aplikace záměrně používá trust_env=False, sloučení tuto politiku respektuje; není to způsob vynucení prostředí klientovi, který je úmyslně vypnul.

Související články