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