Egy kérés működhet session.get() használatával, majd PreparedRequestként átírva elbukhat a tanúsítvány-ellenőrzésen. Az alacsony szintű send útvonal nem végzi el a normál request metóduséval azonos környezeti egyesítést.

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)

A végleges előkészített URL-lel egyesíts az összes tervezett URL-módosítás után. A proxy- és megkerülési döntések a céltól függnek, ezért a korábbi URL-hez gyűjtött beállítások hibásak lehetnek a ténylegesen elküldött kéréshez.

A CA-beállítás könnyen kimarad

Bekapcsolt szokásos környezeti bizalom mellett az egyesítés figyelembe veszi az REQUESTS_CA_BUNDLE és tartaléka, az CURL_CA_BUNDLE értékét, ha az ellenőrzést nem írták felül kifejezetten. A közvetlen send alapértelmezett verify mellett nem végzi el ezt a CA-keresést. Az ellenőrzés kikapcsolása elrejti a különbséget a kívánt tanúsítványtár megadása helyett.

Az Session.prepare_request() a munkamenet előkészítési viselkedését is alkalmazza. A kérés közvetlen létrehozása Request.prepare() használatával külön választás; ne várd a munkamenetsütik vagy más munkamenet-előkészítés automatikus alkalmazását.

A proxykra pontosabb szabály vonatkozik

Pontatlan lenne azt mondani, hogy minden PreparedRequest figyelmen kívül hagyja a proxy-környezeti változókat. A Requests 2.34.2-ben a send feloldja a proxy alapértékeket, ha a proxies kulcsszóargumentum hiányzik. Az proxies={} átadása a sendnek kihagyja ezt a konkrét alapérték-feloldó ágat.

A merge_environment_settingsnek adott üres szótárnak más szerepe van: az egyesítés feltöltheti alkalmazható környezeti útvonalakkal, mielőtt a sendhez kerül. Ha két részletben csak az üres szótárra figyelsz, elkerüli figyelmedet a két különböző fogadó metódus.

Egyedi kérésépítő kódban tartsd együtt az előkészítést, a környezeti egyesítést és a küldést. Amikor az alkalmazás tudatosan trust_env=False értéket használ, az egyesítés ezt tiszteletben tartja; nem kényszerít környezeti beállítást olyan kliensre, amely szándékosan letiltotta.

Kapcsolódó cikkek