Requests PreparedRequest និងការកំណត់បរិស្ថានដែលខ្វះ
រក្សាសំណើរៀបចំពិសេសឱ្យស្របនឹងការគ្រប់គ្រងប្រូកស៊ី និង CA ធម្មតារបស់ Requests ដោយមិនសន្មតថារាល់ 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() ជាជម្រើសដោយឡែក។ កុំរំពឹងថាវាដាក់ខូគីសម័យ ឬការរៀបចំសម័យផ្សេងដោយស្វ័យប្រវត្តិ។
ប្រូកស៊ីមានច្បាប់ជាក់លាក់ជាង
និយាយថារាល់ PreparedRequest មិនអើពើអថេរបរិស្ថានប្រូកស៊ីគឺមិនត្រឹមត្រូវ។ ក្នុង Requests 2.34.2 send កំណត់ប្រូកស៊ីដើមពេលគ្មានអាគុយម៉ង់ឈ្មោះ proxies។ ផ្ដល់ proxies={} ទៅ send រំលងសាខាកំណត់ដើមជាក់លាក់នោះ។
វចនានុក្រមទទេដែលផ្ដល់ទៅ merge_environment_settings មានតួនាទីផ្សេង៖ ការបញ្ចូលអាចបំពេញវាដោយផ្លូវបរិស្ថានដែលអនុវត្ត មុនបញ្ជូនទៅ send។ មើលតែវចនានុក្រមទទេក្នុងកូដពីរនាំឱ្យខកខានវិធីខុសគ្នាដែលទទួលវា។
ក្នុងកូដបង្កើតសំណើពិសេស រក្សាការរៀបចំ ការបញ្ចូលបរិស្ថាន និងការផ្ញើជាមួយគ្នា។ ពេលកម្មវិធីប្រើ trust_env=False ដោយចេតនា ការបញ្ចូលគោរពគោលការណ៍នោះ។ វាមិនបង្ខំការកំណត់បរិស្ថានទៅកម្មវិធីអតិថិជនដែលបិទវាដោយចេតនាទេ។