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