En adgangskode med @ eller # kan ødelægge en håndbygget proxy-URL, selv når loginoplysningerne er korrekte. Tegnene har allerede betydning i en URL, så klienten kan fortolke en del af adgangskoden som værtsnavn eller fragment.

Kod de to felter med loginoplysninger hver for sig

Dette eksempel bevarer URL’ens strukturelle skilletegn og koder kun brugernavn og adgangskode:

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

Brug dit faktiske endepunkt og dine loginoplysninger. Den viste adresse er et dokumentationseksempel. Det tomme safe-argument er vigtigt: quote lader normalt en skråstreg stå uændret, men i dette felt skal den kodes.

Kod ikke hele proxy-URL’en. Kodning af skemaskilletegn og @ mellem loginoplysninger og vært ødelægger den struktur, du ville bevare. Undgå også at kode en allerede kodet adgangskode en gang til.

Brug resultatet med Requests

import requests

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

Hvis forespørgslen stadig fejler, skal du undersøge, om proxyen afviser login, eller om klienten fejlede tidligere under fortolkning eller forbindelse. En 407-godkendelsesudfordring og en ugyldig URL er forskellige fejl.

HTTPX kan holde godkendelsen adskilt

Et HTTPX Proxy-objekt kan modtage endepunkt og loginoplysninger som separate argumenter:

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

Dermed undgår du selv at opbygge userinfo-delen. Det krypterer ikke oplysningerne uafhængigt af proxyforbindelsen og vælger ikke en godkendelsesmetode understøttet af alle tjenester.

Hvis en gratis liste kun giver IP og port, leverer dette eksempel ikke standardloginoplysninger. Brug kun godkendelse, når operatøren faktisk stiller en konto til rådighed. Hold URL’er med loginoplysninger ude af delte logfiler og kildefiler.

Relaterede artikler