Python urllib: grunnleggjande proxyautentisering for HTTP-førespurnader
Bygg ein eksplisitt urllib-opnar for ei Basic-utfordring frå ein HTTP-proxy, og skil denne vanlege HTTP-utvekslinga frå HTTPS CONNECT-autentisering.
For ei Basic-utfordring frå ein HTTP-proxy, bruk ProxyBasicAuthHandler. Dette vanlege HTTP-dømet held ruta og kontoen i éin opnar:
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)Bruk det verkelege endepunktet og kontoen operatøren har gjeve. Handsamaren brukar passordhandsamaren for utfordringa til proxyen; tilpass den tiltenkte proxy-URI-en og realm. Basic-autentisering på destinasjonen brukar ein annan handsamar.
Å kalle opnaren direkte held dette oppsettet lokalt. URL-en til førespurnaden blir verande nettstaden, ikkje mellomleddet. Denne klare HTTP-ruta krypterer ikkje ei Basic-utveksling.
Ikkje lei ut HTTPS-tunnelstøtte frå dette dømet. Ein 407 under CONNECT skjer ved oppsettet, før eit vanleg svar frå destinasjonen; integrasjonen du vel, må handsame autentisering der. Å byte innloggingshandsamaren på nettstaden kan ikkje bøte den tidlegare utfordringa.
Proxy-URL-ar med legitimasjon er eit anna format som finst i eldre døme. Viss dei vert brukte, kod URL-avgrensarar rett og hald den resulterande løyndomsberande URL-en utanfor loggane.