Špeciálne znaky v heslách proxy
Kódujte používateľské meno a heslo proxy zvlášť, aby @, dvojbodky, lomky a # nenarušili URL.
Heslo obsahujúce @ alebo # môže poškodiť ručne zostavené URL proxy, aj keď sú prihlasovacie údaje správne. Tieto znaky už majú v URL význam, takže klient môže časť hesla vyhodnotiť ako názov hostiteľa alebo fragment.
Kódujte obe polia prihlasovacích údajov zvlášť
Tento príklad zachováva štrukturálne oddeľovače URL a kóduje iba používateľské meno a heslo:
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"
)
Použite skutočný koncový bod a prihlasovacie údaje. Uvedená adresa je dokumentačný príklad. Prázdny argument safe je dôležitý: quote bežne ponecháva lomku neescapovanú, ale v tomto poli sa musí zakódovať.
Nekódujte celé URL proxy. Kódovanie oddeľovačov schémy a znaku @ medzi údajmi a hostiteľom zničí štruktúru, ktorú chcete zachovať. Vyhnite sa tiež opätovnému kódovaniu už zakódovaného hesla.
Použite výsledok s Requests
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Ak požiadavka stále zlyháva, zistite, či proxy odmieta prihlásenie, alebo klient zlyhal skôr pri parsovaní či pripájaní. Autentifikačná výzva 407 a neplatné URL sú rôzne chyby.
HTTPX môže ponechať autentifikáciu oddelenú
Objekt Proxy v HTTPX môže prijať koncový bod a prihlasovacie údaje ako samostatné argumenty:
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()
Nemusíte tak sami zostavovať časť userinfo. Nešifruje to údaje nezávisle od spojenia s proxy ani nevyberá autentifikačnú metódu podporovanú každou službou.
Ak bezplatný zoznam ponúka iba IP a port, tento príklad neposkytuje predvolené prihlasovacie údaje. Autentifikáciu používajte len vtedy, keď prevádzkovateľ skutočne poskytuje účet. URL s prihlasovacími údajmi nepatria do zdieľaných logov ani zdrojových súborov.