क्रेडेन्शियल योग्य असतानाही @ किंवा # असलेला पासवर्ड हाताने तयार केलेला प्रॉक्सी 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 सामायिक लॉग आणि स्रोत फाइलमध्ये ठेवू नका.

संबंधित लेख