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.

Sorodni članki