Speciale tekens in proxywachtwoorden
Codeer de proxygebruikersnaam en het wachtwoord apart, zodat @, dubbele punten, schuine strepen en # de URL niet beschadigen.
Een wachtwoord met @ of # kan een handmatig samengestelde proxy-URL beschadigen, zelfs wanneer de inloggegevens kloppen. Die tekens hebben al betekenis in een URL, waardoor de client een deel van het wachtwoord als hostnaam of fragment kan interpreteren.
Codeer de twee velden met inloggegevens apart
Dit voorbeeld houdt de structurele scheidingstekens van de URL intact en codeert alleen gebruikersnaam en wachtwoord:
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"
)
Gebruik je echte endpoint en inloggegevens. Het getoonde adres is een documentatievoorbeeld. Het lege argument safe is belangrijk: quote laat een schuine streep normaal ongemoeid, maar binnen dit veld moet die worden gecodeerd.
Codeer niet de hele proxy-URL. Het coderen van de schemescheidingstekens en de @ tussen inloggegevens en host vernietigt de structuur die je wilde behouden. Codeer ook een al gecodeerd wachtwoord niet opnieuw.
Gebruik het resultaat met Requests
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Als het request nog faalt, controleer dan of de proxy de aanmelding weigert of de client al eerder bij het parsen of verbinden faalde. Een 407-authenticatieverzoek en een ongeldige URL zijn verschillende fouten.
HTTPX kan authenticatie apart houden
Een HTTPX Proxy-object kan het endpoint en de inloggegevens als aparte argumenten aannemen:
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()
Daardoor hoef je het userinfo-deel niet zelf op te bouwen. Het versleutelt de gegevens niet onafhankelijk van de proxyverbinding en kiest geen authenticatiemethode die elke dienst ondersteunt.
Als een gratis lijst alleen IP en poort geeft, levert dit voorbeeld geen standaardinloggegevens. Gebruik authenticatie alleen wanneer de beheerder daadwerkelijk een account verstrekt. Zet URL's met inloggegevens niet in gedeelde logs of bronbestanden.