Python urllib: grundläggande proxyautentisering för HTTP-förfrågningar
Bygg en explicit urllib-opener för en Basic-utmaning från en HTTP-proxy och skilj detta vanliga HTTP-utbyte från HTTPS CONNECT-autentisering.
För en Basic-utmaning från en HTTP-proxy använder du ProxyBasicAuthHandler. Detta vanliga HTTP-exempel håller rutten och kontot i en enda 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)Använd den riktiga slutpunkten och kontot som operatören tillhandahåller. Hanteraren använder lösenordshanteraren för proxyns utmaning; matcha den avsedda proxy-URI:n och reamet. Basic-autentisering på målet använder en annan hanterare.
Att anropa openern direkt håller denna uppsättning lokal. Förfrågans URL förblir webbplatsen, inte mellanhanden. Denna klartextrutt för HTTP krypterar inte ett Basic-utbyte.
Dra inte slutsatsen att HTTPS-tunnlar stöds av detta exempel. En 407 under CONNECT inträffar vid uppsättningen, före ett vanligt svar från målet; den valda integrationen måste hantera autentisering där. Att byta webbplatsens inloggningshanterare kan inte reparera den tidigare utmaningen.
Proxy-URL:er med inloggningsuppgifter är ett annat format som förekommer i äldre exempel. Om de används, koda URL-avgränsare korrekt och håll den resulterande hemliga URL:en utanför loggarna.