Posebni znaki v geslih posrednika
Ločeno kodirajte uporabniško ime in geslo posrednika, da @, dvopičja, poševnice in # ne pokvarijo URL-ja.
Geslo z @ ali # lahko pokvari ročno sestavljen URL posrednika, tudi če so poverilnice pravilne. Ti znaki imajo v URL-ju že pomen, zato lahko odjemalec del gesla razčleni kot ime gostitelja ali fragment.
Polji poverilnic kodirajte ločeno
Ta primer ohrani strukturna ločila URL-ja in kodira samo uporabniško ime ter geslo:
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"
)
Uporabite dejansko končno točko in poverilnice. Prikazani naslov je dokumentacijski primer. Prazen argument safe je pomemben: quote običajno pusti poševnico brez ubežnega zapisa, toda znotraj tega polja jo je treba kodirati.
Ne kodirajte celotnega URL-ja posrednika. Kodiranje ločil sheme in znaka @ med poverilnicami in gostiteljem uniči strukturo, ki jo želite ohraniti. Že kodiranega gesla tudi ne kodirajte še enkrat.
Rezultat uporabite z Requests
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Če zahteva še vedno odpove, preverite, ali posrednik zavrne prijavo ali je odjemalec odpovedal prej med razčlenjevanjem ali povezovanjem. Overitveni izziv 407 in neveljaven URL sta različni napaki.
HTTPX lahko ohrani overjanje ločeno
Objekt Proxy v HTTPX lahko sprejme končno točko in poverilnice kot ločene 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()
Tako dela userinfo ni treba sestavljati ročno. To ne šifrira poverilnic neodvisno od povezave s posrednikom niti ne izbere načina overjanja, ki ga podpirajo vse storitve.
Če brezplačen seznam ponuja samo IP in vrata, ta primer ne daje privzetih poverilnic. Overjanje uporabljajte le, če upravljavec dejansko zagotovi račun. URL-jev s poverilnicami ne zapisujte v deljene dnevnike ali datoteke izvorne kode.