Caracteres especiais nos contrasinais de proxy
Codifica por separado o usuario e o contrasinal do proxy para que @, os dous puntos, as barras e # non rompan o URL.
Un contrasinal con @ ou # pode romper un URL de proxy construído a man aínda que as credenciais sexan correctas. Eses caracteres xa teñen significado nun URL, polo que o cliente pode interpretar parte do contrasinal como nome de host ou fragmento.
Codifica os dous campos de credenciais por separado
Este exemplo conserva os separadores estruturais do URL e codifica só o usuario e o contrasinal:
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"
)
Usa o teu punto de acceso e credenciais reais. O enderezo mostrado é un exemplo de documentación. O argumento safe baleiro importa: quote normalmente deixa a barra sen escapar, pero dentro deste campo de credenciais cómpre codificala.
Non codifiques todo o URL do proxy. Codificar os separadores do esquema e o @ entre as credenciais e o host destrúe a estrutura que intentabas conservar. Evita tamén codificar por segunda vez un contrasinal xa codificado.
Usa o resultado con Requests
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Se a petición segue fallando, comproba se o proxy rexeita o inicio de sesión ou se o cliente fallou antes ao analizar ou conectar. Un desafío de autenticación 407 e un URL non válido son fallos diferentes.
HTTPX pode manter a autenticación separada
Un obxecto Proxy de HTTPX pode recibir o punto de acceso e as credenciais como argumentos separados:
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()
Así evitas construír a parte userinfo pola túa conta. Non cifra as credenciais de maneira independente da conexión ao proxy nin escolle un método de autenticación admitido por todos os servizos.
Se unha lista gratuíta só dá IP e porto, este exemplo non fornece credenciais predeterminadas. Usa autenticación só cando o operador realmente dea unha conta. Mantén os URL con credenciais fóra dos rexistros compartidos e dos ficheiros fonte.