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.

Thirrni metodën open të vetë këtij opener-i kur një rrugë i përket provës. Pika përfundimtare HTTP e shembullit mund të vijë nga shërbimi juaj ose nga lista e proxy HTTP për prova publike. Fragmenti ilustron pronësinë; nuk përcakton politikën e plotë të vërtetimit ose të shëndetit. Mbajini çdo trajtues specifik të llogarisë të lidhur me atë klient të synuar.

urllib.request.install_opener() ndryshon parazgjedhjen e të gjithë procesit që përdorin thirrjet urlopen() të mëvonshme në nivel moduli. Prandaj një kontrollues që kalon nëpër proxy mund të lërë kërkesa të palidhura të përdorin pikën e tij të fundit përfundimtare. Instalimi i përkohshëm dhe rikthimi gjatë pastrimit ende lejojnë kërkesat e njëkohshme të ekzekutohen gjatë ndryshimit të përbashkët.

socket.setdefaulttimeout() në mënyrë të ngjashme ndryshon parazgjedhjet për socket-et e krijuara më pas. Përdorni afatin në nivel operacioni kur vetëm prova duhet ta marrë atë.

Mbyllni përgjigjet e provës dhe mbajini rezultatet specifike: një përgjigje gabimi HTTP nuk është automatikisht një dëgjues proxy i vdekur. Nëse një provë urllib sinkrone përdoret në një shërbim asinkron, zhvendosni punën bllokuese te një worker i përshtatshëm; ai vendim ekzekutimi nuk e bën ndryshimin global të opener-it të izoluar.

Një provë duhet të kthejë vëzhgimin e saj pa lënë një politikë tjetër rrjeti pas. Objekti i saj i klientit dhe operacioni i kufizuar e bëjnë atë kufi eksplicit.

Artikuj të ngjashëm