Geef ProxyHandler een lege mapping als één urllib-opener rechtstreeks moet verbinden:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))

with direct.open("https://example.com/", timeout=10) as response:
    print(response.status)

De lege dictionary geeft geen proxyroutes op. Laat je de mapping weg, dan ontdekt de handler proxy's uit de omgeving en platforminstellingen. Deze twee constructies drukken verschillend beleid uit.

Het voorbeeld gebruikt de standaardbibliotheek van Python en behoudt normale HTTPS-verificatie. Het with-blok sluit de respons, ook wanneer een uitzondering het blok verlaat.

Directe requests en requests via een proxy in dezelfde toepassing

Twee openers kunnen de twee beleidskeuzes dragen zonder omgevingsvariabelen tussen aanroepen te wijzigen:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}))

with proxied.open("https://example.com/", timeout=10) as response:
    print(response.status)

Vervang het loopbackadres door je HTTP-proxy of kies een kandidaat uit de lijst met HTTP-proxy’s voor de vergelijking via een proxy. Die kan de verbinding naar het HTTPS-doel via CONNECT doorgeven als de dienst dat toestaat. Het protocol en de authenticatieondersteuning van de listener moeten bij de handler passen.

Laat de standaardopener ongemoeid

Roep direct.open of proxied.open aan via het object dat voor de route verantwoordelijk is. install_opener wijzigt de procesbrede standaard die de gemaksfuncties van urllib gebruiken; een bibliotheek die dat doet, kan dus ongerelateerde code beïnvloeden. Het is onnodig voor de geïsoleerde opener hierboven.

Het argument timeout is een instelling voor een bewerking, geen volledige limiet voor de werkelijk verstreken tijd van elke overdracht. Lees alleen de benodigde gegevens en gebruik een deadline op een hoger niveau als de taak een strikt totaal tijdbudget heeft.

Deze opener-objecten wijzigen geen client van een andere bibliotheek, een bestaand proces of de proxyinstellingen van een browser.

Gerelateerde artikelen