Requests PreparedRequest և բացակայող միջավայրի կարգավորումներ
Հատուկ պատրաստված հարցումները պահեք Requests-ի սովորական պրոքսի և CA մշակման հետ համահունչ՝ չկարծելով, թե ամեն ցածր մակարդակի send անտեսում է պրոքսիները։
Հարցումը կարող է աշխատել session.get()-ով և PreparedRequest ձևով վերագրելուց հետո ձախողվել վկայագրի ստուգման ժամանակ։ Ցածր մակարդակի send ուղին չի անում միջավայրի նույն միաձուլումը, ինչ սովորական 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)
Միաձուլեք վերջնական պատրաստված URL-ով՝ URL-ի նախատեսված փոփոխություններից հետո։ Պրոքսիի ու շրջանցման որոշումները կախված են նպատակակետից, ուստի նախորդ URL-ի համար հավաքված կարգավորումները կարող են սխալ լինել իրականում ուղարկվող հարցման համար։
CA կարգավորումը հեշտ է բաց թողնել
Միջավայրի նկատմամբ սովորական վստահությունը միացված լինելու դեպքում միաձուլումը հաշվի է առնում REQUESTS_CA_BUNDLE-ը և դրա պահուստային CURL_CA_BUNDLE-ը, եթե ստուգումը բացահայտ վերագրված չէ։ send-ը ուղիղ լռելյայն verify-ով կանչելը չի կատարում այդ CA որոնումը։ Ստուգումն անջատելը թաքցնում է տարբերությունը՝ նախատեսված վկայագրերի պահոց տրամադրելու փոխարեն։
Session.prepare_request()-ը նաև կիրառում է նստաշրջանի պատրաստման վարքը։ Ուղիղ Request.prepare()-ով հարցում ստեղծելը առանձին ընտրություն է․ մի սպասեք նստաշրջանի cookie-ների կամ այլ նստաշրջանային պատրաստման ինքնաշխատ կիրառման։
Պրոքսիների համար կանոնն ավելի կոնկրետ է
Ճիշտ չէր լինի ասել, թե ամեն PreparedRequest անտեսում է պրոքսիի միջավայրի փոփոխականները։ Requests 2.34.2-ում send-ը որոշում է լռելյայն պրոքսիները, երբ բացակայում է proxies անվանված արգումենտը։ send-ին proxies={} տալը բաց է թողնում հենց այդ լռելյայն որոշման ճյուղը։
merge_environment_settings-ին տրված դատարկ բառարանն այլ դեր ունի․ միաձուլումը կարող է այն լրացնել միջավայրի համապատասխան ուղիներով՝ send-ին փոխանցելուց առաջ։ Երկու հատվածում միայն դատարկ բառարան տեսնելը բաց է թողնում այն ընդունող տարբեր մեթոդները։
Հատուկ հարցում կառուցող կոդում պատրաստումը, միջավայրի միաձուլումն ու ուղարկումը պահեք միասին։ Երբ հավելվածը դիտմամբ օգտագործում է trust_env=False, միաձուլումը հարգում է այդ քաղաքականությունը․ այն միջավայրի կարգավորումներ չի պարտադրում դրանք գիտակցաբար անջատած հաճախորդին։