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 তালিকার কোনো প্রার্থী দিন। key-গুলো গন্তব্যের scheme বোঝায়: HTTP URL-এর জন্য http এবং HTTPS URL-এর জন্য https। value-গুলো proxy listener বোঝায়। নেটওয়ার্কে আলাদা পথ দরকার হলে এগুলো আলাদা endpoint হতে পারে।
proxy value http://-কে https key-এর অধীনে রাখা ইচ্ছাকৃত। Requests HTTP listener-এর কাছে CONNECT tunnel চায়, তারপর সেটির মধ্য দিয়ে গন্তব্যের সঙ্গে TLS স্থাপন করে; এটি proxy-র গন্তব্য ও port নীতির অধীন। value-টি https:// করলে proxy-র নিজের সঙ্গে TLS চাওয়া হয়; listener অসংকেতিত HTTP আশা করলে এটি ব্যর্থ হতে পারে।
timeout-এর দুটি সংখ্যার অর্থ
timeout=(5, 15) সংযোগ ও পড়ার timeout নির্ধারণ করে। এটি মোট পনেরো সেকেন্ডের সময়সীমা আরোপ করে না। বিরতি দিয়ে আসা তথ্য, একাধিক ঠিকানা ও সংযোগের চেষ্টা অতিবাহিত সময় বাড়াতে পারে। সেটিংটি বাদ দিলে Requests কোনো সাধারণ timeout দেয় না। তাই response-এর উপযোগী সীমা বাছুন এবং কাজটির জন্য কঠোর মোট সময়সীমা চাইলে 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 প্রত্যাখ্যাত হলে গন্তব্যের response আসার আগেই ProxyError উঠতে পারে। error status-সহ response পাওয়ার পরে HTTPError শাখা আসে; Timeout মানে নির্ধারিত সীমা শেষ হয়েছে। সংযোগ স্থাপনের exception chain স্থানীয়ভাবে পরীক্ষা করুন; শেয়ার করার আগে পরিচয়পত্রযুক্ত endpoint এবং ব্যক্তিগত URL সরিয়ে দিন।
certificate যাচাই চালু রাখুন। অনুমোদিত নেটওয়ার্কে ব্যক্তিগত CA বা পরিচালিত interception ব্যবহৃত হলে যাচাই বন্ধ না করে প্রত্যাশিত trust material দিন।
প্রতিটি অনুরোধের জন্য স্পষ্ট entry এখানে দেওয়া পথগুলো নিয়ন্ত্রণ করে, কিন্তু বাদ পড়া scheme-এ environment থেকে proxy খোঁজার প্রভাব তখনও থাকতে পারে। কলটি পুনর্ব্যবহারযোগ্য Session-এ নেওয়ার সময় environment variable, Session-এর default এবং প্রতিটি অনুরোধের override কীভাবে একসঙ্গে কাজ করবে তা ঠিক করুন; সংযোগ পুনর্ব্যবহার এবং routing নীতি আলাদা সিদ্ধান্ত।