Специални знаци в паролите за прокси
Кодирайте поотделно потребителското име и паролата, за да не нарушават @, двоеточията, наклонените черти и # структурата на 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 с данни за вход в споделени журнали и изходни файлове.