from urllib.request import ProxyHandler, build_opener

def make_proxy_opener(proxy_uri):
    return build_opener(ProxyHandler({
        "http": proxy_uri,
        "https": proxy_uri,
    }))

opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.

Երբ երթուղին ստուգմանն է պատկանում, կանչեք այս opener-ի սեփական open մեթոդը։ Օրինակի HTTP վերջնակետը կարող է գալ ձեր ծառայությունից կամ հանրային ստուգումների համար նախատեսված HTTP proxy ցանկից։ Հատվածը ցույց է տալիս պատկանելությունը. այն չի սահմանում նույնականացման կամ առողջության ամբողջական քաղաքականությունը։ Հաշվի հետ կապված ցանկացած handler կապված պահեք նախատեսված client-ին։

urllib.request.install_opener() փոխում է գործընթացի կանխադրվածը, որն օգտագործում են ավելի ուշ module-մակարդակի urlopen() կանչերը։ Այդ պատճառով proxy-ներով անցնող ստուգիչը կարող է թողնել, որ անկապ հարցումներն օգտագործեն իր վերջին վերջնակետը։ Ժամանակավոր տեղադրումը և մաքրման ժամանակ վերականգնումը դեռ թույլ են տալիս զուգահեռ հարցումներին աշխատել ընդհանուր փոփոխության ընթացքում։

socket.setdefaulttimeout() նույն կերպ փոխում է ավելի ուշ ստեղծված socket-ների կանխադրվածները։ Օգտագործեք գործողության մակարդակի ժամկետը, երբ միայն ստուգումը պետք է ստանա այն։

Փակեք ստուգման պատասխանները և արդյունքները պահեք կոնկրետ. HTTP սխալի պատասխանը ինքնաբերաբար մեռած proxy լսող չէ։ Եթե համաժամանակյա urllib ստուգումն օգտագործվում է ասինխրոն ծառայությունում, արգելափակող աշխատանքը տեղափոխեք համապատասխան worker. այդ կատարման որոշումը գլոբալ opener փոփոխությունը մեկուսացված չի դարձնում։

Ստուգումը պետք է վերադարձնի իր դիտարկումը՝ չթողնելով այլ ցանցային քաղաքականություն։ Նրա սեփական client օբյեկտը և սահմանափակ գործողությունը այդ սահմանը դարձնում են բացահայտ։

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