درخواست 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 کو دیکھتا ہے، جب تصدیق واضح طور پر بدل نہ دی گئی ہو۔ طے شدہ verify کے ساتھ براہ راست send یہ CA تلاش نہیں کرتا۔ تصدیق بند کرنا مطلوبہ سرٹیفکیٹ ذخیرہ دینے کے بجائے فرق چھپاتا ہے۔

Session.prepare_request() نشست کی تیاری کا رویہ بھی لاگو کرتا ہے۔ براہ راست Request.prepare() سے درخواست بنانا الگ انتخاب ہے؛ اس سے نشست کی کوکیز یا دوسری تیاری خودکار لگنے کی توقع نہ رکھیں۔

پراکسی کا اصول زیادہ مخصوص ہے

یہ کہنا درست نہیں کہ ہر PreparedRequest پراکسی ماحول متغیرات نظرانداز کرتا ہے۔ Requests 2.34.2 میں proxies نامی دلیل غائب ہو تو send طے شدہ پراکسی ڈھونڈتا ہے۔ send کو proxies={} دینے سے یہی مخصوص طے شدہ شاخ چھوڑ دی جاتی ہے۔

merge_environment_settings کو دیا گیا خالی لغت مختلف کردار رکھتا ہے؛ یکجا کرنا اسے send کو بھیجنے سے پہلے قابل اطلاق ماحول راستوں سے بھر سکتا ہے۔ دو مثالوں میں صرف خالی لغت دیکھنے سے اسے لینے والے مختلف طریقے نظر نہیں آتے۔

حسب ضرورت درخواست سازی میں تیاری، ماحول یکجا کرنا اور بھیجنا ساتھ رکھیں۔ ایپ جان بوجھ کر trust_env=False استعمال کرے تو یکجا کرنا اس پالیسی کا احترام کرتا ہے؛ ماحول کو ایسے کلائنٹ پر زبردستی نہیں ڈالتا جس نے اسے خود بند کیا ہو۔

متعلقہ مضامین