Lozinka koja sadrži @ ili # može narušiti ručno sastavljen proksi URL čak i kada su pristupni podaci tačni. Ti znakovi već imaju značenje u URL-u, pa klijent može dio lozinke protumačiti kao naziv hosta ili fragment.

Kodirajte dva polja pristupnih podataka odvojeno

Ovaj primjer čuva strukturne razdjelnike URL-a i kodira samo korisničko ime i lozinku:

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

Koristite stvarnu krajnju tačku i pristupne podatke. Prikazana adresa je dokumentacijski primjer. Prazan argument safe je važan: quote obično ostavlja kosu crtu neizmijenjenu, ali kosu crtu unutar ovog polja treba kodirati.

Ne kodirajte cijeli proksi URL. Kodiranje razdjelnika šeme i znaka @ između pristupnih podataka i hosta uništava strukturu koju ste htjeli sačuvati. Nemojte ni već kodiranu lozinku kodirati drugi put.

Koristite rezultat s Requests

import requests

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

Ako zahtjev i dalje ne uspijeva, provjerite odbija li proksi prijavu ili je klijent ranije zakazao pri parsiranju ili povezivanju. Zahtjev za autentifikaciju 407 i neispravan URL različiti su kvarovi.

HTTPX može odvojiti autentifikaciju

HTTPX Proxy objekat može primiti krajnju tačku i pristupne podatke kao odvojene argumente:

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

Time izbjegavate da sami sastavljate dio userinfo. To ne šifrira podatke nezavisno od proksi veze niti bira metodu autentifikacije koju podržava svaki servis.

Ako besplatna lista daje samo IP i port, ovaj primjer ne daje podrazumijevane pristupne podatke. Autentifikaciju koristite samo kada operater stvarno daje račun. URL-ove s pristupnim podacima ne stavljajte u zajedničke dnevnike i izvorne datoteke.

Povezani članci