Specialtegn i proxyadgangskoder
Kod proxybrugernavn og adgangskode hver for sig, så @, koloner, skråstreger og # ikke ødelægger URL’en.
En adgangskode med @ eller # kan ødelægge en håndbygget proxy-URL, selv når loginoplysningerne er korrekte. Tegnene har allerede betydning i en URL, så klienten kan fortolke en del af adgangskoden som værtsnavn eller fragment.
Kod de to felter med loginoplysninger hver for sig
Dette eksempel bevarer URL’ens strukturelle skilletegn og koder kun brugernavn og adgangskode:
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"
)
Brug dit faktiske endepunkt og dine loginoplysninger. Den viste adresse er et dokumentationseksempel. Det tomme safe-argument er vigtigt: quote lader normalt en skråstreg stå uændret, men i dette felt skal den kodes.
Kod ikke hele proxy-URL’en. Kodning af skemaskilletegn og @ mellem loginoplysninger og vært ødelægger den struktur, du ville bevare. Undgå også at kode en allerede kodet adgangskode en gang til.
Brug resultatet med Requests
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Hvis forespørgslen stadig fejler, skal du undersøge, om proxyen afviser login, eller om klienten fejlede tidligere under fortolkning eller forbindelse. En 407-godkendelsesudfordring og en ugyldig URL er forskellige fejl.
HTTPX kan holde godkendelsen adskilt
Et HTTPX Proxy-objekt kan modtage endepunkt og loginoplysninger som separate argumenter:
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()
Dermed undgår du selv at opbygge userinfo-delen. Det krypterer ikke oplysningerne uafhængigt af proxyforbindelsen og vælger ikke en godkendelsesmetode understøttet af alle tjenester.
Hvis en gratis liste kun giver IP og port, leverer dette eksempel ikke standardloginoplysninger. Brug kun godkendelse, når operatøren faktisk stiller en konto til rådighed. Hold URL’er med loginoplysninger ude af delte logfiler og kildefiler.