Requests PreparedRequest i nedostajuće postavke okruženja
Uskladite vlastite pripremljene zahtjeve s uobičajenom obradom proxyja i CA u Requestsu, bez pretpostavke da svaki niskorazinski send zanemaruje proxyje.
Zahtjev može raditi kroz session.get(), a nakon prepisivanja u PreparedRequest pasti na provjeri certifikata. Niskorazinski send put ne izvodi isto spajanje okruženja kao normalna 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)
Spajajte koristeći konačni pripremljeni URL nakon željenih promjena URL-a. Odluke o proxyju i zaobilaženju ovise o odredištu, pa postavke prikupljene za raniji URL mogu biti pogrešne za stvarno poslani zahtjev.
CA postavku lako je previdjeti
Uz uključeno normalno povjerenje u okruženje spajanje razmatra REQUESTS_CA_BUNDLE i njegov rezervni CURL_CA_BUNDLE kada provjera nije izričito nadjačana. Izravan poziv send s početnim verify ne obavlja tu CA pretragu. Isključivanje provjere skriva razliku umjesto da osigura namjeravano spremište certifikata.
Session.prepare_request() primjenjuje i ponašanje pripreme sesije. Izravno stvaranje zahtjeva kroz Request.prepare() zaseban je izbor; ne očekujte automatsku primjenu sesijskih kolačića ili druge pripreme sesije.
Proxyji imaju preciznije pravilo
Ne bi bilo točno reći da svaki PreparedRequest zanemaruje proxy varijable okruženja. U Requests 2.34.2 send određuje početne proxyje kada nedostaje imenovani argument proxies. Davanje proxies={} metodi send preskače tu konkretnu granu određivanja.
Prazan rječnik predan u merge_environment_settings ima drugu ulogu: spajanje ga može ispuniti primjenjivim putovima iz okruženja prije predaje metodi send. Gledanje samo praznog rječnika u dva primjera zanemaruje različite metode koje ga primaju.
U vlastitom kodu za izradu zahtjeva držite pripremu, spajanje okruženja i slanje zajedno. Kada aplikacija namjerno koristi trust_env=False, spajanje poštuje tu politiku; ne nameće postavke okruženja klijentu koji ih je svjesno isključio.