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() انتخاب جداگانهای است؛ انتظار اعمال خودکار کوکیهای نشست یا آمادهسازیهای دیگر نشست را نداشته باشید.
برای پروکسی قاعدهٔ دقیقتری وجود دارد
اینکه هر PreparedRequest متغیرهای محیطی پروکسی را نادیده میگیرد، دقیق نیست. در Requests 2.34.2، اگر آرگومان نامدار proxies غایب باشد، send پروکسیهای پیشفرض را تعیین میکند. دادن proxies={} به send همان شاخهٔ مشخص تعیین پیشفرض را رد میکند.
دیکشنری خالی دادهشده به merge_environment_settings نقش دیگری دارد: ادغام میتواند پیش از ارسال آن به send، مسیرهای محیطی مرتبط را در آن بنویسد. توجه صرف به دیکشنری خالی در دو قطعه، تفاوت روشهای دریافتکننده را از نظر دور میکند.
در کد سفارشی ساخت درخواست، آمادهسازی، ادغام محیط و ارسال را کنار هم نگه دارید. وقتی برنامه عمداً trust_env=False را به کار میبرد، ادغام آن سیاست را رعایت میکند؛ تنظیمات محیط را به کلاینتی که آگاهانه خاموششان کرده تحمیل نمیکند.