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

Поврзани статии