Пароль з @ або # можа сапсаваць уручную складзены 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 з уліковымі данымі ў агульныя журналы і зыходныя файлы.

Падобныя артыкулы