Speciális karakterek a proxyjelszavakban
Kódolja külön a proxy felhasználónevét és jelszavát, hogy a @, a kettőspont, a perjel és a # ne rontsa el az URL-t.
A @ vagy # jelet tartalmazó jelszó akkor is elronthat egy kézzel összeállított proxy-URL-t, ha a hitelesítő adatok helyesek. Ezeknek a karaktereknek már van jelentésük az URL-ben, ezért a kliens a jelszó egy részét gépnévként vagy töredékként értelmezheti.
A két hitelesítőadat-mezőt külön kódolja
Ez a példa megőrzi az URL szerkezeti elválasztóit, és csak a felhasználónevet és jelszót kódolja:
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"
)
A tényleges végpontot és hitelesítő adatokat használja. A feltüntetett cím dokumentációs példa. Fontos az üres safe argumentum: a quote általában változatlanul hagyja a perjelet, de ebben a hitelesítőadat-mezőben kódolni kell.
Ne kódolja a teljes proxy-URL-t. A séma elválasztóinak és a hitelesítő adatok és gépnév közötti @ jelnek a kódolása tönkreteszi a megőrizni kívánt szerkezetet. Kerülje a már kódolt jelszó másodszori kódolását is.
Használja az eredményt a Requestsszel
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Ha a kérés továbbra is hibázik, vizsgálja meg, hogy a proxy utasítja-e el a bejelentkezést, vagy a kliens már korábban, feldolgozáskor vagy kapcsolódáskor hibázott. Egy 407-es hitelesítési felszólítás és egy érvénytelen URL különböző hibák.
A HTTPX külön kezelheti a hitelesítést
A HTTPX Proxy objektuma külön argumentumként fogadhatja a végpontot és a hitelesítő adatokat:
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()
Így nem kell kézzel összeállítani a userinfo részt. Ez nem titkosítja az adatokat a proxykapcsolattól függetlenül, és nem választ minden szolgáltatás által támogatott hitelesítési módot.
Ha egy ingyenes lista csak IP-címet és portot ad, ez a példa nem szolgáltat alapértelmezett hitelesítő adatokat. Hitelesítést csak akkor használjon, ha az üzemeltető ténylegesen ad fiókot. A hitelesítő adatokat tartalmazó URL-eket ne tegye közös naplókba vagy forrásfájlokba.