Requests PreparedRequest en ontbrekende omgewingsinstellings
Laat pasgemaakte voorbereide versoeke Requests se gewone proxy- en CA-bundelhantering volg, sonder om aan te neem dat elke laevlak-send proxies ignoreer.
’n Versoek kan deur session.get() werk en ná herskryf as ’n PreparedRequest met sertifikaatverifikasie misluk. Die laevlak-send-pad doen nie dieselfde omgewingsamevoeging as die gewone request-metode nie.
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)
Voeg saam met die finale voorbereide URL, nadat alle beoogde URL-veranderings gemaak is. Proxy- en omseilbesluite hang van die bestemming af; instellings vir ’n vroeëre URL kan dus verkeerd wees vir die versoek wat jy werklik stuur.
Die CA-instelling word maklik misgekyk
Met gewone omgewingsvertroue aan, neem die samevoeging REQUESTS_CA_BUNDLE en die terugval CURL_CA_BUNDLE in ag wanneer verifikasie nie uitdruklik oorheers is nie. Om send direk met die verstek-verify-instelling te roep, doen nie dié CA-opsoek nie. Om verifikasie af te skakel, versteek die verskil in plaas daarvan om die bedoelde sertifikaatstoor te voorsien.
Session.prepare_request() pas ook die sessie se voorbereidingsgedrag toe. Om ’n versoek direk met Request.prepare() te skep, is ’n aparte keuse; moenie verwag dat dit sessiekoekies of ander sessievoorbereiding outomaties toepas nie.
Proxies het ’n meer spesifieke reël
Dit sou onakkuraat wees om te sê dat elke PreparedRequest proxyomgewingsveranderlikes ignoreer. In Requests 2.34.2 bepaal send die proxyverstekke wanneer die proxies-sleutelwoord ontbreek. As proxies={} aan send gegee word, word daardie spesifieke verstekbepalingstak oorgeslaan.
Die leë woordeboek wat aan merge_environment_settings gegee word, het ’n ander rol: die samevoeging kan dit met toepaslike omgewingsroetes vul voordat dit aan send gestuur word. As jy net die leë woordeboek in twee kodebrokke raaksien, mis jy dat verskillende metodes dit ontvang.
Hou voorbereiding, omgewingsamevoeging en versending bymekaar in pasgemaakte versoekboukode. Wanneer die toepassing doelbewus trust_env=False gebruik, eerbiedig die samevoeging dié beleid; dit dwing nie omgewingsinstellings af op ’n kliënt wat hulle opsetlik afgeskakel het nie.