Python urllib: grundlæggende proxygodkendelse til HTTP-anmodninger
Byg en eksplicit urllib-opener til en Basic-udfordring fra en HTTP-proxy, og skeln den almindelige HTTP-udveksling fra HTTPS CONNECT-godkendelse.
Til en Basic-udfordring fra en HTTP-proxy skal du bruge ProxyBasicAuthHandler. Dette almindelige HTTP-eksempel holder ruten og kontoen i é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)Brug det rigtige endepunkt og den konto, operatøren har givet. Handleren bruger adgangskodeadministratoren til proxyens udfordring; match den tilsigtede proxy-URI og realm. Basic-godkendelse på destinationen bruger en anden handler.
At kalde openeren direkte holder denne opsætning lokal. Anmodningens URL forbliver webstedet, ikke mellemleddet. Denne klare HTTP-rute krypterer ikke en Basic-udveksling.
Udled ikke HTTPS-tunnelstøtte af dette eksempel. En 407 under CONNECT sker ved opsætningen, før et almindeligt svar fra destinationen; den valgte integration skal håndtere godkendelse der. At ændre webstedets login-handler kan ikke reparere den tidligere udfordring.
Proxy-URL'er med legitimationsoplysninger er et andet format, som findes i ældre eksempler. Hvis de bruges, skal URL-afgrænsere kodes korrekt, og den resulterende hemmelighedsbærende URL holdes ude af logfiler.