Posebni znakovi u lozinkama proksija
Kodirajte korisničko ime i lozinku proksija odvojeno kako @, dvotačke, kose crte i # ne bi narušili URL.
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.