Специјални знаци во лозинките за прокси
Кодирајте ги корисничкото име и лозинката одделно за @, две точки, коси црти и # да не го расипат 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 со податоци за најава во споделени дневници и изворни датотеки.