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.

Apelați metoda open proprie acestui opener atunci când o rută aparține verificării. Punctul final HTTP din exemplu poate veni din serviciul dumneavoastră sau din lista de proxy HTTP pentru verificări publice. Fragmentul ilustrează proprietatea; nu definește politica completă de autentificare sau de sănătate. Păstrați orice handler specific contului atașat clientului prevăzut.

urllib.request.install_opener() modifică valoarea implicită la nivel de proces folosită de apelurile urlopen() ulterioare la nivel de modul. Un verificator care parcurge proxy-uri poate astfel lăsa cereri nelegate să folosească ultimul său punct final. Instalarea temporară și restaurarea la curățare permit în continuare cererilor concurente să ruleze în timpul mutației partajate.

socket.setdefaulttimeout() modifică în mod similar valorile implicite pentru socket-urile create ulterior. Folosiți expirarea la nivel de operație atunci când doar verificarea trebuie să o primească.

Închideți răspunsurile verificării și păstrați rezultatele specifice: un răspuns de eroare HTTP nu este automat un ascultător proxy mort. Dacă o verificare urllib sincronă este folosită într-un serviciu asincron, mutați munca blocantă către un worker potrivit; acea decizie de execuție nu face mutația globală a opener-ului izolată.

O verificare ar trebui să returneze observația sa fără a lăsa o altă politică de rețea în urmă. Propriul obiect client și operația limitată fac această graniță explicită.

Articole similare