Python Requests में proxy IP का उपयोग
Requests में हर अनुरोध के लिए proxy मार्ग स्पष्ट करें, endpoint का सही scheme चुनें और timeout व HTTPS tunnel की विफलताएँ संभालें।
प्रोजेक्ट में Requests उपलब्ध हो तो कॉल को proxy mapping दें:
import requests
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
print(response.status_code)
loopback endpoint की जगह अपना चालू proxy या HTTP proxy सूची का कोई उम्मीदवार दें, जिसे आप इस अनुरोध से जाँचेंगे। कुंजियाँ गंतव्य का scheme बताती हैं: HTTP URL के लिए http और HTTPS URL के लिए https। मान proxy listener बताते हैं। नेटवर्क को अलग मार्ग चाहिए तो ये अलग endpoint हो सकते हैं।
proxy मान http:// को https कुंजी के नीचे रखना जानबूझकर किया गया है। Requests HTTP listener से CONNECT tunnel माँगता है, फिर उसके ज़रिए गंतव्य से TLS स्थापित करता है; यह proxy की गंतव्य और port नीति के अधीन है। मान को https:// करने पर खुद proxy तक TLS माँगा जाता है; listener को बिना एन्क्रिप्शन वाला HTTP अपेक्षित हो तो यह विफल हो सकता है।
timeout के दो अंकों का अर्थ
timeout=(5, 15) कनेक्शन और पढ़ने के timeout तय करता है। यह कुल पंद्रह सेकंड की समयसीमा नहीं लगाता। बीच-बीच में आने वाला डेटा, कई पते और कनेक्शन के प्रयास कुल समय बढ़ा सकते हैं। यह सेटिंग छोड़ने पर Requests कोई सामान्य timeout नहीं देता, इसलिए प्रतिक्रिया के अनुरूप सीमाएँ चुनें और काम के लिए सख्त कुल समय चाहिए तो application स्तर पर deadline जोड़ें।
विफलता को उसी चरण में संभालें जहाँ वह होती है
try:
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
except requests.exceptions.ProxyError as error:
print("Proxy setup failed:", type(error).__name__)
except requests.exceptions.Timeout:
print("A configured timeout expired")
except requests.exceptions.HTTPError as error:
print("HTTP status:", error.response.status_code)
CONNECT अस्वीकृत होने पर गंतव्य की प्रतिक्रिया आने से पहले ProxyError उठ सकता है। त्रुटि status वाली प्रतिक्रिया मिलने के बाद HTTPError शाखा आती है; Timeout का अर्थ है कि निर्धारित सीमा समाप्त हो गई। कनेक्शन स्थापित करने के दौरान की exception chain स्थानीय रूप से जाँचें और साझा करने से पहले credentials वाले endpoint तथा निजी URL हटा दें।
प्रमाणपत्र सत्यापन चालू रखें। अधिकृत नेटवर्क निजी CA या प्रबंधित interception इस्तेमाल करता हो तो सत्यापन बंद करने के बजाय अपेक्षित trust material दें।
हर अनुरोध के लिए स्पष्ट प्रविष्टियाँ यहाँ दिए गए मार्ग नियंत्रित करती हैं, लेकिन छूटे हुए scheme पर environment से proxy खोजने का असर अब भी पड़ सकता है। कॉल को दोबारा इस्तेमाल करने योग्य Session में ले जाते समय तय करें कि environment variable, Session के default और हर अनुरोध के override आपस में कैसे काम करें; कनेक्शन का पुनः उपयोग और routing नीति अलग विकल्प हैं।