చిన్న 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 మార్గాన్ని అనుసరిస్తుంది.

సంబంధిత వ్యాసాలు