Парола с @ или # може да повреди ръчно сглобен прокси 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 с данни за вход в споделени журнали и изходни файлове.

Подобни статии