প্রক্সি অপারেটরের নির্ধারিত হেডারের জন্য Requests HTTPAdapter.proxy_headers-কে একটি ওভাররাইড পয়েন্ট হিসেবে দেয়:

from urllib.parse import urlsplit
import requests
from requests.adapters import HTTPAdapter

class TaggedProxy(HTTPAdapter):
    def proxy_headers(self, proxy):
        headers = super().proxy_headers(proxy)
        endpoint = urlsplit(proxy)
        if (endpoint.scheme == 'http'
                and endpoint.hostname == 'proxy.example'
                and endpoint.port == 8080):
            headers['X-Proxy-Account'] = 'department-a'
        return headers

with requests.Session() as session:
    adapter = TaggedProxy()
    session.mount('http://', adapter)
    session.mount('https://', adapter)
    response = session.get(
        'https://service.example/data',
        proxies={'https': 'http://proxy.example:8080'},
        timeout=15,
    )

X-Proxy-Account হলো এই নির্দিষ্ট প্রক্সি যেভাবে বোঝে এমন একটি ফিল্ডের উদাহরণ, প্রতিটি মধ্যস্থের সঙ্গে সত্যতা যাচাইয়ের মানক উপায় নয়।

super().proxy_headers(proxy) দিয়ে শুরু করুন। URL কোনো Basic অ্যাকাউন্ট দিলে Requests ওই পদ্ধতি ব্যবহার করে Proxy-Authorization তৈরি করে। পুরো ফলাফল প্রতিস্থাপন করলে সেই আচরণ হারিয়ে যেতে পারে।

অ্যাডাপ্টার এই মানগুলো urllib3-এর ProxyManager-এ পাঠায়। HTTPS টানেলের ক্ষেত্রে সেগুলো CONNECT-এর সঙ্গে যায়। সাধারণ রিকোয়েস্ট হেডার ম্যাপিং পরবর্তী গন্তব্য-রিকোয়েস্ট বর্ণনা করে।

প্রক্সি ম্যানেজার প্রক্সি URL অনুযায়ী ক্যাশ করা হয়। প্রতিটি কলে বদলাতে হবে এমন মানের জন্য এই হুককে ক্যাশহীন প্রতি-ব্যবসায়িক-রিকোয়েস্ট কলব্যাক ভাববেন না। অ্যাকাউন্ট মার্কার বদলালে সেই অনুযায়ী ট্রান্সপোর্টের মালিকানা বেছে নিন।

সাধারণ HTTP ফরওয়ার্ডিংয়েও প্রক্সি ফিল্ডের জন্য মধ্যস্থের অভিপ্রেত ব্যবহার-নীতি দরকার। ক্লায়েন্ট API-তে হেডার প্রক্সি-নির্দিষ্ট হওয়া গোপনীয়তার নিশ্চয়তা নয়, যদি প্রক্সি সেটি আরও সামনে পাঠায়।

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