Спецыяльныя сімвалы ў паролях проксі
Кадзіруйце імя карыстальніка і пароль проксі асобна, каб @, двукроп’і, касыя рысы і # не ламалі URL.
Пароль з @ або # можа сапсаваць уручную складзены URL проксі, нават калі ўліковыя даныя правільныя. Гэтыя сімвалы ўжо маюць значэнне ў URL, таму кліент можа разабраць частку пароля як імя хоста або фрагмент.
Кадзіруйце два палі ўліковых даных асобна
Гэты прыклад захоўвае структурныя раздзяляльнікі URL і кадзіруе толькі імя карыстальніка і пароль:
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"
)
Выкарыстоўвайце свой сапраўдны канцавы пункт і ўліковыя даныя. Паказаны адрас — прыклад для дакументацыі. Пусты аргумент safe важны: quote звычайна пакідае касую рысу без экранавання, але ў гэтым полі ўліковых даных яе трэба кадаваць.
Не кадзіруйце ўвесь URL проксі. Кадаванне раздзяляльнікаў схемы і @ паміж уліковымі данымі і хостам разбурае структуру, якую вы хацелі захаваць. Таксама не кадзіруйце ўжо закадзіраваны пароль другі раз.
Выкарыстоўвайце вынік з Requests
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
Калі запыт па-ранейшаму не праходзіць, праверце, ці адхіляе проксі ўваход, ці кліент даў збой раней, пры разборы або злучэнні. Запыт аўтэнтыфікацыі 407 і недапушчальны URL — розныя збоі.
HTTPX дазваляе аддзяліць аўтэнтыфікацыю
Аб’ект Proxy у HTTPX можа прымаць канцавы пункт і ўліковыя даныя асобнымі аргументамі:
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()
Гэта пазбаўляе ад ручнога стварэння часткі userinfo. Але не шыфруе ўліковыя даныя незалежна ад злучэння з проксі і не выбірае спосаб аўтэнтыфікацыі, які падтрымліваюць усе сэрвісы.
Калі бясплатны спіс дае толькі IP і порт, гэты прыклад не дае ўліковых даных па змаўчанні. Выкарыстоўвайце аўтэнтыфікацыю толькі калі аператар сапраўды дае ўліковы запіс. Не змяшчайце URL з уліковымі данымі ў агульныя журналы і зыходныя файлы.