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

HTTPX Proxy објекат може да прими крајњу тачку и приступне податке као одвојене аргументе:

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-ове са приступним подацима не стављајте у заједничке дневнике и изворне датотеке.

Повезани чланци