پراکسیهای Session در Python Requests و اولویت محیط
با روشنکردن رابطهٔ session.proxies، متغیرهای محیط، تنظیمات هر درخواست و trust_env مسیریابی Python Requests را پیشبینیپذیر کنید.
اگر session.proxies به یک نقطهٔ اتصال اشاره میکند اما اسکریپت از پراکسی پوسته استفاده میکند، انتساب دوبارهٔ همان دیکشنری تعارض را حل نمیکند. Requests ممکن است تنظیمات پراکسی محیط را با اولویت بر پیشفرضهای Session ادغام کند. تصمیم بگیرید Session همچنان تنظیمات را از محیط کشف کند یا نه.
کشف محیط را نگه دارید و مسیرها را در درخواست بدهید
مطابق توصیهٔ Requests برای پرهیز از این تعارض Session و محیط، مقادیر صریح را به هر فراخوانی بدهید:
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
with requests.Session() as session:
response = session.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
شنوندهٔ محلی را با شنوندهٔ خود جایگزین کنید. هنگام مقایسهٔ نقاط HTTP عمومی، سیاست Session را ثابت نگه دارید و نامزدها را از فهرست پروکسیهای HTTP بردارید. این کار ورودیهای نگاشت ارائهشده را کنترل میکند؛ برای سایر طرحها یا میزبانهای برنامه نیز آگاهانه انتخاب کنید. سرویس، IDE، کانتینر یا اجراکنندهٔ CI ممکن است محیطی متفاوت با پایانهٔ شما به ارث ببرد.
مدیریت تنظیمات را به خود Session بسپارید
اگر برنامه نباید پراکسی را از محیط کشف کند، سیاست را پیش از اولین درخواست تنظیم کنید:
with requests.Session() as session:
session.trust_env = False
session.proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = session.get(
"https://example.com/",
timeout=(5, 15),
)
response.raise_for_status()
trust_env=False بر پیکربندی گواهی مرتبط با محیط و احراز هویت خودکار netrc نیز اثر میگذارد. پیش از انتخاب، این وابستگیها را در نظر بگیرید. برای مجموعهٔ خصوصی و تأییدشدهٔ گواهی CA میتوانید مسیر صریح بدهید:
response = session.get(
"https://example.com/",
timeout=(5, 15),
verify="/path/to/approved-ca-bundle.pem",
)
از مجموعهٔ واقعاً تأییدشده استفاده کنید و بررسی را روشن نگه دارید. برای هر سیاست مسیریابی یک Session جدا داشته باشید، نه اینکه یکی را هنگام استفادهٔ کارهای دیگر تغییر دهید.
اگر هیچکدام مسیر برنامه را توضیح نمیدهد، یک Session جداشده را با برنامه در همان محیط اجرا و با مقصد بیخطر یکسان مقایسه کنید. متغیرهای پراکسی موجود، مقدار trust_env و ارسال یا عدم ارسال proxies در فراخوانی را ثبت کنید؛ URL دارای اطلاعات ورود را وارد گزارش مشترک نکنید. موفقیت جداشده، بررسی بعدی را به ساخت Session، آداپتورها، جریان درخواستهای آمادهشده یا انتقالهای سفارشی هدایت میکند. آزمایش محیط با curl رفتار ادغام خود Requests را تعیین نمیکند.