Për një diagnostikim të vogël proxy me urllib3, përdorni ProxyManager me riprovimet të çaktivizuara. Kjo raporton përpjekjen e parë në vend që të humbasë kohë me një hyrje që ka pushuar së punuari. Në një projekt të menaxhuar me uv:

uv add urllib3

Zëvendësoni pikën fundore të dokumentimit me një proxy HTTP nga shërbimi juaj ose lista e proxy-ve HTTP dhe ekzekutoni kërkesën përmes atij menaxheri:

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()

Lexoni fillimisht response.status, pastaj shqyrtoni response.data. Këto janë fushat e urllib3; status_code dhe text të stilit Requests nuk janë zëvendësime. Refuzimi i faqes mund të vijë përmes një proxy funksional. Një përjashtim para përgjigjes tregon, përkundrazi, dështim në përfundimin e kërkesës.

retries=False është zgjedhje diagnostikimi, jo politikë riprovimi për prodhim. Cilësimet 5 sekonda për lidhjen dhe 10 sekonda për leximin kufizojnë fazat e tyre; nuk formojnë një afat të përgjithshëm të garantuar prej 15 sekondash. DNS dhe përparimi i përgjigjes mund të ndikojnë në pritjen totale.

Shembulli e ngarkon paraprakisht trupin dhe pastron në fund grupet e lidhjeve të menaxherit. Për kërkesa të përsëritura përmes së njëjtës pikë, mbajeni menaxherin deri në fund të punës që lidhjet të ripërdoren. Kalimi në preload_content=False ndryshon ciklin: thirrësi duhet të lexojë dhe lirojë përgjigjen në rrjedhë.

Zgjidhni menaxherin sipas shërbimit që dëgjon. Një PoolManager i zakonshëm nuk fillon të përdorë proxy sepse një URL ruhet diku tjetër; SOCKS përdor urllib3.contrib.socks.SOCKSProxyManager dhe varësitë e tij opsionale. Kodi më lart ndjek rrugën HTTP ProxyManager.

Artikuj të ngjashëm