सानो 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 मा जाँदा जीवनचक्र बदलिन्छ: कल गर्नेले स्ट्रिम प्रतिक्रिया पढेर मुक्त गर्नुपर्छ।

सुनिरहेको सेवासँग मिल्ने प्रबन्धक छान्नुहोस्। अरू ठाउँमा URL राख्दा सामान्य PoolManager प्रोक्सी-सचेत हुँदैन; SOCKS ले urllib3.contrib.socks.SOCKSProxyManager र यसको वैकल्पिक निर्भरता प्रयोग गर्छ। माथिको कोड HTTP ProxyManager बाटोमा छ।

सम्बन्धित लेखहरू