Requests PreparedRequest és hiányzó környezeti beállítások
Tartsd összhangban az egyedi előkészített kéréseket a Requests szokásos proxy- és CA-kezelésével, ne feltételezd, hogy minden alacsony szintű send figyelmen kívül hagyja a proxyt.
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.