छोटी urllib3 प्रॉक्सी जाँच के लिए पुनःप्रयास बंद करके ProxyManager इस्तेमाल करें। इससे बंद हो चुकी प्रविष्टि को बार-बार आज़माने में समय लगाने के बजाय पहला प्रयास सामने आता है। uv से प्रबंधित प्रोजेक्ट में:

uv add urllib3

दस्तावेज़ी एंडपॉइंट को अपनी सेवा या HTTP प्रॉक्सी सूची की HTTP प्रॉक्सी से बदलें और अनुरोध उसी मैनेजर से करें:

import urllib3

proxy = urllib3.ProxyManager(
    "http://203.0.113.10:8080",
    timeout=urllib3.Timeout(connect=5, read=10),
    retries=False,
)

try:
    response = proxy.request("GET", "https://example.com/")
    print(response.status)
    print(response.data.decode("utf-8", errors="replace")[:200])
finally:
    proxy.clear()

पहले response.status पढ़ें, फिर response.data देखें। ये urllib3 के फ़ील्ड हैं; Requests के status_code और text इनके विकल्प नहीं हैं। वेबसाइट का इनकार काम करती प्रॉक्सी से आ सकता है। जवाब से पहले अपवाद का अर्थ है कि अनुरोध पूरा नहीं हुआ।

retries=False जाँच का चुनाव है, प्रोडक्शन पुनःप्रयास नीति नहीं। कनेक्शन के 5 सेकंड और पढ़ने के 10 सेकंड अपनी-अपनी अवस्थाएँ सीमित करते हैं; ये मिलकर गारंटी वाला कुल 15 सेकंड का समय नहीं बनाते। DNS और जवाब की प्रगति कुल प्रतीक्षा को प्रभावित कर सकते हैं।

उदाहरण बॉडी पहले लोड करता है और अंत में मैनेजर के पूल साफ़ करता है। उसी एंडपॉइंट पर बार-बार अनुरोधों के लिए काम खत्म होने तक मैनेजर रखें ताकि कनेक्शन दोबारा इस्तेमाल हों। preload_content=False पर जाने से जीवनचक्र बदलता है: कॉल करने वाले को स्ट्रीम वाला जवाब पढ़ना और रिलीज़ करना होगा।

मैनेजर सुनने वाली सेवा के अनुसार चुनें। सामान्य PoolManager कहीं और URL रख देने से प्रॉक्सी-सक्षम नहीं बन जाता; SOCKS urllib3.contrib.socks.SOCKSProxyManager और उसकी वैकल्पिक निर्भरताएँ इस्तेमाल करता है। ऊपर का कोड HTTP ProxyManager रास्ता अपनाता है।

संबंधित लेख