Specialaj signoj en prokurilaj pasvortoj
Kodu la prokurilajn uzantnomon kaj pasvorton aparte, por ke @, dupunktoj, oblikvoj kaj # ne rompu la URL-on.
Pasvorto kun @ aŭ # povas rompi permane konstruitan prokurilan URL-on eĉ kiam la ensalutiloj ĝustas. Tiuj signoj jam havas signifon en URL, do la kliento povas analizi parton de la pasvorto kiel gastignomon aŭ fragmenton.
Kodu la du ensalutilajn kampojn aparte
Ĉi tiu ekzemplo konservas la strukturajn apartigilojn de la URL kaj kodas nur la uzantnomon kaj pasvorton:
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"
)
Uzu vian efektivan finpunkton kaj ensalutilojn. La montrita adreso estas dokumenta ekzemplo. La malplena argumento safe gravas: quote normale lasas oblikvon neeskapita, sed oblikvo en ĉi tiu ensalutila kampo devas esti kodita.
Ne kodu la tutan prokurilan URL-on. Kodi la skemajn apartigilojn kaj la @ inter ensalutiloj kaj gastiganto detruas la konservendan strukturon. Ankaŭ evitu duan kodadon de jam kodita pasvorto.
Uzu la rezulton kun Requests
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Se la peto ankoraŭ malsukcesas, kontrolu ĉu la prokurilo rifuzas la ensaluton aŭ ĉu la kliento malsukcesis pli frue dum analizo aŭ konektado. Aŭtentikiga defio 407 kaj nevalida URL estas malsamaj fiaskoj.
HTTPX povas teni aŭtentikigon aparta
Objekto Proxy de HTTPX povas ricevi la finpunkton kaj ensalutilojn kiel apartajn argumentojn:
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()
Tio evitas mem konstrui la parton userinfo. Ĝi ne ĉifras la ensalutilojn sendepende de la prokurila konekto kaj ne elektas aŭtentikigan metodon subtenatan de ĉiu servo.
Se senpaga listo liveras nur IP-adreson kaj pordon, ĉi tiu ekzemplo ne liveras defaŭltajn ensalutilojn. Uzu aŭtentikigon nur kiam la funkciiganto vere donas konton. Ne metu URL-ojn kun ensalutiloj en komunajn protokolojn kaj fontdosierojn.