Speciālās rakstzīmes starpniekservera parolēs
Kodējiet lietotājvārdu un paroli atsevišķi, lai @, koli, slīpsvītras un # nesabojātu URL.
Parole ar @ vai # var sabojāt manuāli veidotu starpniekservera URL pat tad, ja akreditācijas dati ir pareizi. Šīm rakstzīmēm URL jau ir nozīme, tāpēc klients daļu paroles var interpretēt kā resursdatora nosaukumu vai fragmentu.
Kodējiet abus akreditācijas datu laukus atsevišķi
Šis piemērs saglabā URL struktūras atdalītājus un kodē tikai lietotājvārdu un paroli:
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"
)
Izmantojiet savu īsto galapunktu un akreditācijas datus. Parādītā adrese ir dokumentācijas piemērs. Tukšais arguments safe ir svarīgs: quote parasti atstāj slīpsvītru neekranētu, taču šajā akreditācijas datu laukā tā jākodē.
Nekodējiet visu starpniekservera URL. Shēmas atdalītāju un @ starp akreditācijas datiem un resursdatoru kodēšana iznīcina struktūru, kuru vēlējāties saglabāt. Nekodējiet jau kodētu paroli otrreiz.
Lietojiet rezultātu ar Requests
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Ja pieprasījums joprojām neizdodas, pārbaudiet, vai starpniekserveris noraida pieteikšanos vai klients kļūdījās agrāk, parsējot vai savienojoties. 407 autentifikācijas pieprasījums un nederīgs URL ir dažādas kļūmes.
HTTPX var turēt autentifikāciju atsevišķi
HTTPX Proxy objekts var saņemt galapunktu un akreditācijas datus kā atsevišķus argumentus:
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()
Tad userinfo daļa nav jāveido pašam. Tas nešifrē akreditācijas datus neatkarīgi no savienojuma ar starpniekserveri un neizvēlas autentifikācijas metodi, ko atbalsta visi pakalpojumi.
Ja bezmaksas saraksts sniedz tikai IP un portu, šis piemērs nedod noklusējuma akreditācijas datus. Autentifikāciju izmantojiet tikai tad, ja operators patiešām nodrošina kontu. URL ar akreditācijas datiem nelieciet koplietotos žurnālos vai pirmkoda failos.