Python urllib: Basic-proxyverificatie voor HTTP-verzoeken
Bouw een expliciete urllib-opener voor een Basic-uitdaging van een HTTP-proxy en onderscheid deze gewone HTTP-uitwisseling van HTTPS CONNECT-verificatie.
Gebruik voor een Basic-uitdaging van een HTTP-proxy ProxyBasicAuthHandler. Dit gewone HTTP-voorbeeld houdt de route en het account in één opener:
import os
from urllib.request import (
ProxyHandler, ProxyBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener,
)
proxy_url = 'http://proxy.example:8080'
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(
None, proxy_url,
os.environ['PROXY_USER'], os.environ['PROXY_PASSWORD'],
)
opener = build_opener(
ProxyHandler({'http': proxy_url}),
ProxyBasicAuthHandler(passwords),
)
with opener.open('http://example.com/', timeout=10) as response:
print(response.status)Gebruik het echte eindpunt en het account dat de beheerder levert. De handler gebruikt de wachtwoordbeheerder voor de uitdaging van de proxy; stem de bedoelde proxy-URI en realm af. De Basic-verificatie op de bestemming gebruikt een andere handler.
De opener rechtstreeks aanroepen houdt deze opzet lokaal. De URL van het verzoek blijft de website, niet de tussenpersoon. Deze onversleutelde HTTP-route versleutelt geen Basic-uitwisseling.
Leid uit dit voorbeeld geen HTTPS-tunnelondersteuning af. Een 407 tijdens CONNECT treedt op bij het opzetten, vóór een gewoon antwoord van de bestemming; de gekozen integratie moet daar de verificatie afhandelen. De inloghandler van de site wijzigen kan die eerdere uitdaging niet herstellen.
Proxy-URL's met inloggegevens zijn een ander formaat dat in oudere voorbeelden voorkomt. Als ze worden gebruikt, codeer URL-scheidingstekens correct en houd de resulterende geheime URL buiten de logboeken.