Päring võib session.get() kaudu töötada ning PreparedRequestiks ümber kirjutatuna serdi kontrollis ebaõnnestuda. Madala taseme send-tee ei tee sama keskkonna ühendamist kui tavaline request-meetod.

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)

Ühenda lõpliku ettevalmistatud URL-iga pärast kavandatud URL-muudatusi. Puhverserveri- ja möödaviiguotsused sõltuvad sihtkohast, seega varasema URL-i seaded võivad päriselt saadetavale päringule valed olla.

CA-seade on lihtne märkamata jätta

Kui tavaline keskkonna usaldamine on sisse lülitatud, arvestab ühendamine REQUESTS_CA_BUNDLE ja selle varuvarianti CURL_CA_BUNDLE, kui kontrolli pole otseselt üle kirjutatud. Otse send-i kutsumine vaikimisi verify-seadega ei tee seda CA-otsingut. Kontrolli väljalülitamine peidab erinevuse, mitte ei anna soovitud serdihoidlat.

Session.prepare_request() rakendab ka seansi ettevalmistuskäitumist. Päringu otse Request.prepare() abil loomine on eraldi valik; ära eelda seansiküpsiste või muu seansi ettevalmistuse automaatset rakendamist.

Puhverserveritel on täpsem reegel

Oleks ebatäpne öelda, et iga PreparedRequest eirab puhverserveri keskkonnamuutujaid. Requests 2.34.2-s leiab send vaikimisi puhverserverid, kui võtmesõnaargument proxies puudub. proxies={} andmine send-ile jätab just selle vaikeväärtuste haru vahele.

merge_environment_settings-ile antud tühjal sõnastikul on muu roll: ühendamine võib täita selle sobivate keskkonnateedega enne send-ile edastamist. Ainult tühja sõnastiku nägemine kahes näites jätab märkamata erinevad meetodid, mis selle saavad.

Hoia oma päringuehituskoodis ettevalmistus, keskkonna ühendamine ja saatmine koos. Kui rakendus kasutab teadlikult trust_env=False, austab ühendamine seda poliitikat; see ei suru keskkonnaseadeid kliendile, kes need meelega keelas.

Seotud artiklid