एक एंडपॉइंट को क्लाइंट के अनुरोध संभालने हों तो proxy= इस्तेमाल करें। गंतव्य स्कीम के अनुसार अलग रास्ते चाहिए तो mounts= इस्तेमाल करें। उदाहरण HTTPX के इन इंटरफ़ेस का उपयोग करते हैं; पुराने proxies= API वाले प्रोजेक्ट को अपने संस्करण के अनुरूप कॉन्फ़िगरेशन चाहिए।

एक एंडपॉइंट

import httpx

timeout = httpx.Timeout(15.0, connect=5.0)

with httpx.Client(
    proxy="http://127.0.0.1:8080",
    trust_env=False,
    timeout=timeout,
) as client:
    response = client.get("https://example.com/")
    response.raise_for_status()
    print(response.status_code)

स्थानीय लिसनर को चल रहे HTTP प्रॉक्सी से बदलें। HTTP प्रॉक्सी सूची का विकल्प भी अपने गंतव्य पर जाँचना होगा। HTTPS गंतव्य CONNECT से इस http:// एंडपॉइंट का उपयोग कर सकता है। स्कीम https:// करने से खुद प्रॉक्सी तक TLS माँगा जाता है, जिसका समर्थन लिसनर और क्लाइंट दोनों में होना चाहिए।

गंतव्य स्कीम के अनुसार अलग रास्ते

import httpx

mounts = {
    "http://": httpx.HTTPTransport(
        proxy="http://127.0.0.1:8080",
        trust_env=False,
    ),
    "https://": httpx.HTTPTransport(
        proxy="http://127.0.0.1:8081",
        trust_env=False,
    ),
}

with httpx.Client(
    mounts=mounts,
    trust_env=False,
    timeout=httpx.Timeout(15.0, connect=5.0),
) as client:
    response = client.get("https://example.com/")
    response.raise_for_status()
    print(response.status_code)

Mount की कुंजियाँ गंतव्य URL से मेल खाती हैं। यहाँ HTTP गंतव्य पोर्ट 8080 और HTTPS गंतव्य 8081 चुनते हैं। प्रॉक्सी का मान लिसनर का अपना प्रोटोकॉल बताता है, इसलिए HTTPS mount में http:// प्रॉक्सी होना सही है। अपने एंडपॉइंट डालकर दोनों गंतव्य स्कीम जाँचें।

दोनों विधियाँ क्लाइंट पर और जहाँ transport दिए गए हैं उन पर trust_env=False सेट करती हैं। अन्यथा HTTPX डिफ़ॉल्ट रूप से प्रॉक्सी और प्रमाणपत्र के पर्यावरण चर पढ़ता है। डिप्लॉयमेंट उन पर निर्भर हो तो पहचान सक्रिय रखें या ज़रूरी रास्ते व भरोसा स्पष्ट सेट करें। निजी भरोसे के लिए अपने HTTPX संस्करण का समर्थित TLS context और CA कॉन्फ़िगरेशन लें; गंतव्य सत्यापन सक्रिय रखें। HTTPS प्रॉक्सी का भरोसा गंतव्य के भरोसे से अलग हो सकता है।

httpx.Timeout(15.0, connect=5.0) कनेक्शन की समय-सीमा बदलता है और दूसरे कॉन्फ़िगर किए हिस्सों को डिफ़ॉल्ट मान देता है। पढ़ने, लिखने और pool के इंतज़ार की अलग सीमाएँ हैं; पंद्रह सेकंड पूरे बीते समय की अंतिम सीमा नहीं हैं। Pool timeout का मतलब दूसरी प्रक्रिया का उपलब्ध कनेक्शन रोके रखना भी हो सकता है। इसे प्रॉक्सी तक न पहुँच पाने का प्रमाण मानने से पहले क्लाइंट और streaming response ठीक से बंद करें।

संबंधित लेख