Speciální znaky v heslech proxy
Kódujte uživatelské jméno a heslo proxy zvlášť, aby @, dvojtečky, lomítka a # nenarušily URL.
Heslo obsahující @ nebo # může poškodit ručně sestavené URL proxy, i když jsou přihlašovací údaje správné. Tyto znaky už mají v URL význam, takže klient může část hesla vyhodnotit jako název hostitele nebo fragment.
Kódujte obě pole přihlašovacích údajů zvlášť
Tento příklad zachovává strukturální oddělovače URL a kóduje pouze uživatelské jméno 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žijte skutečný endpoint a přihlašovací údaje. Uvedená adresa je dokumentační příklad. Prázdný argument safe je důležitý: quote běžně ponechává lomítko bez escapování, ale uvnitř tohoto pole se musí zakódovat.
Nekódujte celé URL proxy. Kódování oddělovačů schématu a znaku @ mezi údaji a hostitelem zničí strukturu, kterou chcete zachovat. Vyhněte se také opětovnému kódování již zakódovaného hesla.
Použijte výsledek s Requests
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Pokud požadavek stále selhává, zjistěte, zda proxy odmítá přihlášení, nebo klient selhal dříve při parsování či připojování. Autentizační výzva 407 a neplatné URL jsou různé chyby.
HTTPX může ponechat autentizaci oddělenou
Objekt Proxy v HTTPX může přijmout endpoint a přihlašovací údaje jako 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 sestavovat část userinfo. Nešifruje to údaje nezávisle na spojení s proxy ani nevybírá autentizační metodu podporovanou každou službou.
Pokud bezplatný seznam nabízí pouze IP a port, tento příklad neposkytuje výchozí přihlašovací údaje. Autentizaci používejte jen tehdy, když provozovatel skutečně poskytuje účet. URL s přihlašovacími údaji nepatří do sdílených logů ani zdrojových souborů.