'n Wagwoord met @ of # kan 'n handgemaakte instaanbediener-URL breek selfs wanneer die aanmeldbesonderhede korrek is. Dié karakters het reeds betekenisse in 'n URL, en die kliënt kan dus 'n deel van die wagwoord as gasheernaam of fragment ontleed.

Kodeer die twee aanmeldvelde afsonderlik

Hierdie voorbeeld behou die URL se strukturele skeidingstekens en kodeer net die gebruikersnaam en wagwoord:

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

Gebruik jou werklike eindpunt en aanmeldbesonderhede. Die getoonde adres is 'n dokumentasievoorbeeld. Die leë safe-argument maak saak: quote laat 'n skuinsstreep gewoonlik onveranderd, maar binne hierdie aanmeldveld moet dit gekodeer word.

Moenie die hele instaanbediener-URL kodeer nie. Kodering van die skemaskeidingstekens en die @ tussen aanmeldbesonderhede en gasheer vernietig die struktuur wat jy wou behou. Vermy ook om 'n reeds gekodeerde wagwoord 'n tweede keer te kodeer.

Gebruik die resultaat met Requests

import requests

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

As die versoek steeds misluk, kyk of die instaanbediener die aanmelding weier of die kliënt vroeër tydens ontleding of verbinding misluk het. 'n 407-verifikasie-uitdaging en 'n ongeldige URL is verskillende foute.

HTTPX kan verifikasie apart hou

'n HTTPX Proxy-objek kan die eindpunt en aanmeldbesonderhede as afsonderlike argumente ontvang:

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

Dit vermy dat jy die userinfo-deel self moet opbou. Dit enkripteer nie die aanmeldbesonderhede onafhanklik van die instaanbedienerverbinding nie, en kies ook nie 'n verifikasiemetode wat elke diens ondersteun nie.

As 'n gratis lys slegs 'n IP en poort verskaf, gee hierdie voorbeeld nie verstekaanmeldbesonderhede nie. Gebruik verifikasie net wanneer die operateur werklik 'n rekening verskaf. Hou URL's met aanmeldbesonderhede uit gedeelde logboeke en bronlêers.

Verwante artikels