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