O parolă cu @ sau # poate strica un URL de proxy construit manual, chiar dacă datele de autentificare sunt corecte. Aceste caractere au deja semnificație în URL, astfel încât clientul poate interpreta o parte din parolă ca nume de gazdă sau fragment.

Codificați separat cele două câmpuri de autentificare

Acest exemplu păstrează separatorii structurali ai URL-ului și codifică numai numele de utilizator și parola:

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"
)

Folosiți punctul final și datele de autentificare reale. Adresa afișată este un exemplu de documentație. Argumentul safe gol contează: quote lasă de obicei bara oblică neescapată, dar în acest câmp ea trebuie codificată.

Nu codificați întregul URL de proxy. Codificarea separatorilor schemei și a lui @ dintre datele de autentificare și gazdă distruge structura pe care încercați să o păstrați. Evitați și codificarea a doua oară a unei parole deja codificate.

Folosiți rezultatul cu Requests

import requests

response = requests.get(
    "https://example.com/",
    proxies={"http": proxy_url, "https": proxy_url},
    timeout=(5, 15),
)
response.raise_for_status()

Dacă cererea tot eșuează, verificați dacă proxy-ul respinge autentificarea sau dacă clientul a eșuat mai devreme la analiză ori conectare. O provocare de autentificare 407 și un URL nevalid sunt erori diferite.

HTTPX poate ține autentificarea separată

Un obiect Proxy din HTTPX poate primi punctul final și datele de autentificare ca argumente separate:

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()

Astfel nu trebuie să construiți singur partea userinfo. Aceasta nu criptează datele independent de conexiunea proxy și nu alege o metodă de autentificare acceptată de toate serviciile.

Dacă o listă gratuită oferă doar IP și port, acest exemplu nu oferă date de autentificare implicite. Folosiți autentificarea numai când operatorul furnizează efectiv un cont. Nu puneți URL-uri cu date de autentificare în jurnale partajate și fișiere sursă.

Articole similare