Requests PreparedRequest kaj mankantaj medioagordoj
Tenu proprajn preparitajn petojn kongruaj kun la normalaj prokurilaj kaj CA-agoj de Requests sen supozi ke ĉiu malaltnivela send ignoras prokurilojn.
Peto povas funkcii per session.get() kaj malsukcesi ĉe atestilkontrolo post reskribo kiel PreparedRequest. La malaltnivela send-vojo ne faras la saman medikunfandon kiel la normala request-metodo.
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)
Kunfandu uzante la finan preparitan URL post ĉiuj celitaj URL-ŝanĝoj. Prokurilaj kaj preteriraj decidoj dependas de la celo, do agordoj kolektitaj por antaŭa URL povas esti malĝustaj por la efektive sendata peto.
La CA-agordon estas facile preteratenti
Kun normala mediofido ŝaltita, kunfando konsideras REQUESTS_CA_BUNDLE kaj ĝian rezervon CURL_CA_BUNDLE kiam kontrolo ne estas eksplicite superregita. Voki send rekte kun la defaŭlta verify ne faras tiun CA-serĉon. Malŝalti kontrolon kaŝas la diferencon anstataŭ provizi la celitan atestilkonservejon.
Session.prepare_request() ankaŭ aplikas la preparan konduton de la seanco. Krei peton rekte per Request.prepare() estas aparta elekto; ne atendu aŭtomatan aplikon de seanckuketoj aŭ alia seancopreparo.
Prokuriloj havas pli specifan regulon
Estus malĝuste diri ke ĉiu PreparedRequest ignoras prokurilajn mediovariablojn. En Requests 2.34.2, send determinas prokurilajn defaŭltojn kiam ĝia ŝlosilvorta argumento proxies mankas. Doni proxies={} al send preterpasas ĝuste tiun defaŭltan branĉon.
La malplena vortaro donita al merge_environment_settings havas alian rolon: la kunfando povas plenigi ĝin per aplikeblaj mediovojoj antaŭ transdono al send. Rigardi nur la malplenan vortaron en du ekzemploj maltrafas la malsamajn metodojn, kiuj ricevas ĝin.
En propra petkonstrua kodo tenu preparon, medikunfandon kaj sendadon kune. Kiam la aplikaĵo intence uzas trust_env=False, la kunfando respektas tiun politikon; ĝi ne devigas medioagordojn al kliento kiu konscie ilin malŝaltis.