Mga Espesyal na Character sa mga Password ng Proxy
I-encode nang hiwalay ang username at password ng proxy para hindi masira ng @, colon, slash at # ang URL.
Maaaring masira ng password na may @ o # ang proxy URL na binuo nang manu-mano kahit tama ang mga kredensyal. May kahulugan na ang mga character na iyon sa URL, kaya maaaring basahin ng client ang bahagi ng password bilang hostname o fragment.
I-encode nang hiwalay ang dalawang field ng kredensyal
Pinananatili ng halimbawang ito ang mga structural separator ng URL at username at password lamang ang ini-encode:
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"
)
Gamitin ang tunay mong endpoint at mga kredensyal. Halimbawa para sa dokumentasyon ang ipinakitang address. Mahalaga ang walang-lamang argument na safe: karaniwang hindi ine-escape ng quote ang slash, pero dapat i-encode ang slash sa field na ito ng kredensyal.
Huwag i-encode ang buong proxy URL. Nasasira ang istrukturang nais mong panatilihin kapag ini-encode ang mga separator ng scheme at ang @ sa pagitan ng mga kredensyal at host. Iwasan ding i-encode muli ang password na naka-encode na.
Gamitin ang resulta sa Requests
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Kung pumapalya pa rin ang request, tingnan kung tinatanggihan ng proxy ang login o kung mas maagang pumalya ang client sa pag-parse o pagkonekta. Magkaibang pagkabigo ang 407 authentication challenge at isang hindi wastong URL.
Maaaring ihiwalay ng HTTPX ang authentication
Maaaring tumanggap ang HTTPX Proxy object ng endpoint at mga kredensyal bilang magkahiwalay na argument:
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()
Hindi mo na kailangang buuin mismo ang userinfo na bahagi. Hindi nito ini-encrypt ang mga kredensyal nang hiwalay sa koneksyon sa proxy, ni pumipili ng paraan ng authentication na suportado ng lahat ng serbisyo.
Kung IP at port lamang ang ibinibigay ng libreng listahan, hindi nagbibigay ang halimbawang ito ng default na mga kredensyal. Gumamit lamang ng authentication kapag talagang nagbibigay ng account ang operator. Huwag ilagay ang mga URL na may kredensyal sa shared log at source file.