@- või #-märgiga parool võib käsitsi koostatud puhverserveri URL-i rikkuda isegi õigete autentimisandmete korral. Neil märkidel on URL-is juba tähendus, mistõttu klient võib osa paroolist tõlgendada hostinime või fragmendina.

Kodeeri kaks autentimisvälja eraldi

See näide säilitab URL-i struktuursed eraldajad ja kodeerib ainult kasutajanime ning parooli:

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"
)

Kasuta tegelikku lõpp-punkti ja autentimisandmeid. Näidatud aadress on dokumentatsiooninäide. Tühi argument safe on oluline: quote jätab tavaliselt kaldkriipsu kodeerimata, kuid selles autentimisväljas tuleb kaldkriips kodeerida.

Ära kodeeri kogu puhverserveri URL-i. Skeemi eraldajate ja autentimisandmete ning hosti vahelise @ kodeerimine lõhub struktuuri, mida soovisid säilitada. Ära kodeeri juba kodeeritud parooli teist korda.

Kasuta tulemust Requestsiga

import requests

response = requests.get(
    "https://example.com/",
    proxies={"http": proxy_url, "https": proxy_url},
    timeout=(5, 15),
)
response.raise_for_status()

Kui päring ikka ebaõnnestub, kontrolli, kas puhverserver keeldub sisselogimisest või klient ebaõnnestus varem parsimisel või ühendamisel. 407 autentimisnõue ja vigane URL on eri tõrked.

HTTPX saab autentimist eraldi hoida

HTTPX-i Proxy-objekt võib võtta lõpp-punkti ja autentimisandmed eraldi argumentidena:

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()

Nii ei pea userinfo-osa ise koostama. See ei krüpti autentimisandmeid puhverserveri ühendusest sõltumatult ega vali kõigi teenuste toetatud autentimisviisi.

Kui tasuta loend annab ainult IP ja pordi, ei paku see näide vaikimisi autentimisandmeid. Kasuta autentimist vaid siis, kui haldaja annab päriselt konto. Ära pane autentimisandmetega URL-e jagatud logidesse ega lähtefailidesse.

Seotud artiklid