@ կամ # պարունակող գաղտնաբառը կարող է վնասել ձեռքով հավաքված պրոքսիի 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-ները մի գրանցեք ընդհանուր մատյաններում կամ սկզբնական կոդի ֆայլերում։

Առնչվող հոդվածներ