Python urllib: podstawowe uwierzytelnianie serwera proxy dla żądań HTTP
Zbuduj jawny opener urllib dla wyzwania Basic od serwera proxy HTTP i odróżnij tę zwykłą wymianę HTTP od uwierzytelniania HTTPS CONNECT.
W przypadku wyzwania Basic od serwera proxy HTTP użyj ProxyBasicAuthHandler. Ten zwykły przykład HTTP trzyma trasę i konto w jednym openerze:
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)Użyj rzeczywistego punktu końcowego i konta dostarczonego przez operatora. Procedura obsługi korzysta z menedżera haseł dla wyzwania serwera proxy; dopasuj zamierzony URI i realm serwera proxy. Uwierzytelnianie Basic po stronie celu używa innej procedury.
Bezpośrednie wywołanie openera utrzymuje tę konfigurację lokalnie. URL żądania pozostaje witryną, a nie pośrednikiem. Ta jawna trasa HTTP nie szyfruje wymiany Basic.
Nie wnioskuj z tego przykładu obsługi tunelu HTTPS. 407 podczas CONNECT występuje przy konfiguracji, przed zwykłą odpowiedzią celu; wybrana integracja musi tam obsłużyć uwierzytelnianie. Zmiana procedury logowania witryny nie naprawi tego wcześniejszego wyzwania.
Adresy URL serwera proxy z poświadczeniami to inny format spotykany w starszych przykładach. Jeśli są używane, poprawnie koduj separatory URL i trzymaj powstały URL z sekretem poza logami.