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 ուղով։

Առնչվող հոդվածներ