Requests PreparedRequest i nedostajuće postavke okruženja
Uskladite sopstvene pripremljene zahteve s uobičajenom proxy i CA obradom Requestsa, bez pretpostavke da svaki niskonivojski send ignoriše proxyje.
Zahtev može raditi kroz session.get(), a nakon prepisivanja u PreparedRequest pasti na proveri sertifikata. Niskonivojski send put ne izvodi isto spajanje okruženja kao normalni request metod.
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)
Spajajte koristeći konačni pripremljeni URL posle željenih promena URL-a. Odluke o proxyju i zaobilaženju zavise od odredišta, pa postavke prikupljene za raniji URL mogu biti pogrešne za zahtev koji stvarno šaljete.
CA postavku lako je prevideti
Uz uključeno normalno poverenje u okruženje spajanje razmatra REQUESTS_CA_BUNDLE i njegov rezervni CURL_CA_BUNDLE kada provera nije izričito nadjačana. Direktan poziv send s podrazumevanim verify ne obavlja tu CA pretragu. Isključivanje provere skriva razliku umesto da pruži nameravano spremište sertifikata.
Session.prepare_request() primenjuje i ponašanje pripreme sesije. Direktno kreiranje zahteva kroz Request.prepare() zaseban je izbor; ne očekujte automatsku primenu sesijskih kolačića ili druge sesijske pripreme.
Proxyji imaju preciznije pravilo
Ne bi bilo tačno reći da svaki PreparedRequest ignoriše proxy promenljive okruženja. U Requests 2.34.2 send razrešava podrazumevane proxyje kada nedostaje ključni argument proxies. Davanje proxies={} metodu send preskače tu konkretnu granu razrešavanja.
Prazan rečnik prosleđen u merge_environment_settings ima drugu ulogu: spajanje ga može popuniti primenljivim putanjama iz okruženja pre slanja metodu send. Gledanje samo praznog rečnika u dva primera zanemaruje različite metode koje ga primaju.
U sopstvenom kodu za građenje zahteva držite pripremu, spajanje okruženja i slanje zajedno. Kada aplikacija namerno koristi trust_env=False, spajanje poštuje tu politiku; ne nameće postavke okruženja klijentu koji ih je svesno isključio.