Caràcters especials a les contrasenyes de proxy
Codifiqueu per separat l’usuari i la contrasenya del proxy perquè @, els dos punts, les barres i # no trenquin l’URL.
Una contrasenya amb @ o # pot trencar un URL de proxy construït a mà encara que les credencials siguin correctes. Aquests caràcters ja tenen significat en un URL, de manera que el client pot interpretar part de la contrasenya com a nom d’amfitrió o fragment.
Codifiqueu els dos camps de credencials per separat
Aquest exemple conserva els separadors estructurals de l’URL i codifica només l’usuari i la contrasenya:
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"
)
Feu servir el punt d’accés i les credencials reals. L’adreça mostrada és un exemple de documentació. L’argument safe buit és important: quote normalment deixa la barra sense escapar, però dins d’aquest camp de credencials cal codificar-la.
No codifiqueu tot l’URL del proxy. Codificar els separadors de l’esquema i el @ entre les credencials i l’amfitrió destrueix l’estructura que intentàveu conservar. Eviteu també codificar una segona vegada una contrasenya ja codificada.
Utilitzeu el resultat amb Requests
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Si la petició encara falla, comproveu si el proxy rebutja l’inici de sessió o si el client ha fallat abans durant l’anàlisi o la connexió. Un repte d’autenticació 407 i un URL no vàlid són fallades diferents.
HTTPX pot mantenir l’autenticació separada
Un objecte Proxy d’HTTPX pot rebre el punt d’accés i les credencials com a arguments separats:
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()
Això evita construir la part userinfo manualment. No xifra les credencials independentment de la connexió amb el proxy ni tria un mètode d’autenticació admès per tots els serveis.
Si una llista gratuïta només dona IP i port, aquest exemple no proporciona credencials predeterminades. Feu servir autenticació només quan l’operador ofereixi realment un compte. No poseu URL amb credencials als registres compartits ni als fitxers font.