Requests PreparedRequest ir trūkstamos aplinkos nuostatos
Suderinkite savo paruoštas užklausas su įprastu Requests proxy ir CA tvarkymu, nemanydami, kad kiekvienas žemo lygio send ignoruoja tarpinius serverius.
Užklausa gali veikti per session.get() ir po perrašymo į PreparedRequest nepraeiti sertifikato tikrinimo. Žemo lygio send kelias neatlieka to paties aplinkos sujungimo kaip įprastas request metodas.
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)
Junkite naudodami galutinį paruoštą URL po numatytų URL pakeitimų. Tarpinio serverio ir apėjimo sprendimai priklauso nuo tikslo, todėl ankstesniam URL surinktos nuostatos gali būti netinkamos iš tiesų siunčiamai užklausai.
CA nuostatą lengva pražiūrėti
Įjungus įprastą pasitikėjimą aplinka, sujungimas atsižvelgia į REQUESTS_CA_BUNDLE ir atsarginį CURL_CA_BUNDLE, kai tikrinimas nėra aiškiai perrašytas. Tiesioginis send su numatytuoju verify neatlieka tos CA paieškos. Tikrinimo išjungimas slepia skirtumą, o ne suteikia norimą sertifikatų saugyklą.
Session.prepare_request() pritaiko ir seanso paruošimo elgesį. Kurti užklausą tiesiogiai su Request.prepare() yra atskiras pasirinkimas; nesitikėkite automatiškai taikomų seanso slapukų ar kito seanso paruošimo.
Tarpiniams serveriams taikoma tikslesnė taisyklė
Būtų netikslu sakyti, kad kiekvienas PreparedRequest ignoruoja proxy aplinkos kintamuosius. Requests 2.34.2 send nustato numatytuosius tarpinius serverius, jei trūksta vardinio argumento proxies. Perdavus proxies={} į send praleidžiama būtent ši numatytųjų reikšmių šaka.
Tuščias žodynas, perduotas merge_environment_settings, turi kitą vaidmenį: sujungimas gali užpildyti jį taikomais aplinkos maršrutais prieš perdavimą send. Matant vien tuščią žodyną dviejose ištraukose pražiūrimi skirtingi jį gaunantys metodai.
Savo užklausų kūrimo kode laikykite paruošimą, aplinkos sujungimą ir siuntimą kartu. Kai programa tyčia naudoja trust_env=False, sujungimas gerbia šią politiką; jis neprimeta aplinkos klientui, kuris sąmoningai ją išjungė.