ضبط ترويسات الوكيل عبر HTTPAdapter.proxy_headers في Requests
توسيع HTTPAdapter.proxy_headers لحقل يحدده الوكيل مع الحفاظ على توليد Requests الحالي لترويسة مصادقة الوكيل.
بالنسبة إلى ترويسة يحددها مشغّل الوكيل، يتيح 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). يستخدم Requests هذه الدالة لتوليد Proxy-Authorization عندما يوفّر العنوان حساب Basic. واستبدال النتيجة كاملة قد يلغي هذا السلوك.
يمرّر المحوّل هذه القيم إلى ProxyManager في urllib3. وفي نفق HTTPS ترافق CONNECT. أما خريطة ترويسات الطلب العادية فتصف طلب الوجهة اللاحق.
تُخزَّن مديريات الوكيل مؤقتًا حسب عنوان الوكيل. لا تعامل هذه الخطافة كدالة رد غير مخزّنة لكل طلب عمل عندما تكون القيمة بحاجة إلى التغيّر في كل استدعاء. اختر ملكية النقل وفقًا لذلك عندما تتغيّر علامة الحساب.
في تمرير HTTP العادي، ما تزال حقول الوكيل تحتاج إلى سياسة الاستهلاك المقصودة عند الوسيط. وكون الترويسة خاصة بالوكيل في واجهة العميل ليس ضمانًا للسرية إذا أعاد الوكيل تمريرها.