Erimärgid puhverserveri paroolides
Kodeeri puhverserveri kasutajanimi ja parool eraldi, et @, koolonid, kaldkriipsud ja # ei rikuks URL-i.
@- või #-märgiga parool võib käsitsi koostatud puhverserveri URL-i rikkuda isegi õigete autentimisandmete korral. Neil märkidel on URL-is juba tähendus, mistõttu klient võib osa paroolist tõlgendada hostinime või fragmendina.
Kodeeri kaks autentimisvälja eraldi
See näide säilitab URL-i struktuursed eraldajad ja kodeerib ainult kasutajanime ning parooli:
from urllib.parse import quote
username = "user@team"
password = "p:a/ss#?"
proxy_url = (
"http://"
+ quote(username, safe="")
+ ":"
+ quote(password, safe="")
+ "@203.0.113.10:8080"
)
Kasuta tegelikku lõpp-punkti ja autentimisandmeid. Näidatud aadress on dokumentatsiooninäide. Tühi argument safe on oluline: quote jätab tavaliselt kaldkriipsu kodeerimata, kuid selles autentimisväljas tuleb kaldkriips kodeerida.
Ära kodeeri kogu puhverserveri URL-i. Skeemi eraldajate ja autentimisandmete ning hosti vahelise @ kodeerimine lõhub struktuuri, mida soovisid säilitada. Ära kodeeri juba kodeeritud parooli teist korda.
Kasuta tulemust Requestsiga
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Kui päring ikka ebaõnnestub, kontrolli, kas puhverserver keeldub sisselogimisest või klient ebaõnnestus varem parsimisel või ühendamisel. 407 autentimisnõue ja vigane URL on eri tõrked.
HTTPX saab autentimist eraldi hoida
HTTPX-i Proxy-objekt võib võtta lõpp-punkti ja autentimisandmed eraldi argumentidena:
import httpx
proxy = httpx.Proxy(
"http://203.0.113.10:8080",
auth=("user@team", "p:a/ss#?"),
)
with httpx.Client(proxy=proxy, trust_env=False, timeout=15) as client:
response = client.get("https://example.com/")
response.raise_for_status()
Nii ei pea userinfo-osa ise koostama. See ei krüpti autentimisandmeid puhverserveri ühendusest sõltumatult ega vali kõigi teenuste toetatud autentimisviisi.
Kui tasuta loend annab ainult IP ja pordi, ei paku see näide vaikimisi autentimisandmeid. Kasuta autentimist vaid siis, kui haldaja annab päriselt konto. Ära pane autentimisandmetega URL-e jagatud logidesse ega lähtefailidesse.