একটি urllib opener সরাসরি সংযোগ করবে এমন হলে ProxyHandler-কে খালি ম্যাপিং দিন:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))

with direct.open("https://example.com/", timeout=10) as response:
    print(response.status)

খালি ডিকশনারি কোনো প্রক্সি পথ সরবরাহ করে না। ম্যাপিং বাদ দিলে হ্যান্ডলার পরিবেশ ও প্ল্যাটফর্মের সেটিং থেকে প্রক্সি খুঁজে নেয়। তৈরির এই দুই পদ্ধতি ভিন্ন নীতি প্রকাশ করে।

উদাহরণটি Python-এর স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করে এবং স্বাভাবিক HTTPS যাচাই বজায় রাখে। with ব্লক প্রতিক্রিয়া বন্ধ করে, এমনকি ব্যতিক্রমের কারণে ব্লক থেকে বেরিয়ে গেলেও।

একই অ্যাপ্লিকেশনে সরাসরি ও প্রক্সির মাধ্যমে অনুরোধ

দুটি opener দুটি নীতি রাখতে পারে, কলের মাঝে পরিবেশ ভেরিয়েবল না বদলিয়েই:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}))

with proxied.open("https://example.com/", timeout=10) as response:
    print(response.status)

লুপব্যাক ঠিকানাটি নিজের HTTP প্রক্সি দিয়ে বদলান, অথবা প্রক্সির মাধ্যমে তুলনার জন্য HTTP প্রক্সির তালিকা থেকে প্রার্থী বাছুন। সেবা অনুমতি দিলে এটি HTTPS লক্ষ্যের সংযোগ CONNECT-এর মাধ্যমে বহন করতে পারে। শ্রোতার প্রোটোকল ও প্রমাণীকরণ সমর্থন হ্যান্ডলারের সঙ্গে মানানসই হতে হবে।

ডিফল্ট opener অপরিবর্তিত রাখুন

পথের দায়িত্বে থাকা অবজেক্ট দিয়ে direct.open বা proxied.open কল করুন। install_opener প্রক্রিয়াজুড়ে সেই ডিফল্ট বদলে দেয় যা urllib-এর সুবিধাজনক ফাংশনগুলো ব্যবহার করে; ফলে এটি ব্যবহারকারী লাইব্রেরি অসংশ্লিষ্ট কোডে প্রভাব ফেলতে পারে। ওপরের পৃথক opener-এর জন্য এটি দরকার নেই।

timeout আর্গুমেন্ট একটি অপারেশনের সেটিং, প্রতিটি স্থানান্তরের পুরো বাস্তব সময়ের সীমা নয়। কাজের জন্য দরকারি ডেটাই পড়ুন এবং কঠোর মোট সময়সীমা থাকলে উচ্চতর স্তরের সময়সীমা ব্যবহার করুন।

এই opener অবজেক্টগুলো অন্য লাইব্রেরির ক্লায়েন্ট, বিদ্যমান প্রক্রিয়া বা ব্রাউজারের প্রক্সি সেটিং বদলায় না।

সম্পর্কিত নিবন্ধ