Python urllib: grunnleggende proxyautentisering for HTTP-forespørsler
Lag en eksplisitt urllib-opener for en Basic-utfordring fra en HTTP-proxy, og skille denne vanlige HTTP-utvekslingen fra HTTPS CONNECT-autentisering.
For en Basic-utfordring fra en HTTP-proxy bruker du ProxyBasicAuthHandler. Dette vanlige HTTP-eksempelet 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)Bruk det virkelige endepunktet og kontoen som operatøren oppgir. Handleren bruker passordbehandleren for utfordringen fra proxyen; match den tiltenkte proxy-URI-en og realm. Basic-autentisering på målet bruker en annen handler.
Å kalle openeren direkte holder dette oppsettet lokalt. URL-en i forespørselen forblir nettstedet, ikke mellomleddet. Denne klare HTTP-ruten krypterer ikke en Basic-utveksling.
Ikke utled HTTPS-tunnelstøtte fra dette eksempelet. En 407 under CONNECT oppstår ved oppsett, før et vanlig svar fra målet; integrasjonen du velger må håndtere autentisering der. Å endre innloggingshandleren på nettstedet kan ikke reparere den tidligere utfordringen.
Proxy-URL-er med påloggingsinformasjon er et annet format som finnes i eldre eksempler. Hvis de brukes, kod URL-avgrensere riktig og hold den resulterende hemmelige URL-en utenfor loggene.