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.

Kaugnay na mga artikulo