قيمة وكيل تقليدية مثل http://proxy.example:8080 هي عنوان URL. يقبل clientFromString في Twisted وصف نقطة نهاية مثل tcp:host=proxy.example:port=8080. يصف النصان معلومات مترابطة بقواعد مختلفة.

إذا كان التطبيق يقبل عنوان URL تقليديًا لوكيل HTTP، فحلّله قبل إنشاء نقطة النهاية:

import os
from urllib.parse import urlsplit
from twisted.internet.endpoints import HostnameEndpoint
from twisted.web.client import ProxyAgent

proxy = urlsplit(os.environ['http_proxy'])
if proxy.scheme != 'http' or not proxy.hostname:
    raise ValueError('Expected an HTTP proxy URL')
port = proxy.port if proxy.port is not None else 80
endpoint = HostnameEndpoint(reactor, proxy.hostname, port, timeout=5)
agent = ProxyAgent(endpoint, reactor=reactor)

تفترض المقتطفة أن التطبيق يملك مفاعله بالفعل. حدّد منفذ الوكيل الحقيقي في التكوين عندما لا يكون المنفذ الافتراضي لعنوان HTTP. تقدّم قائمة وكلاء HTTP مرشّحين لنقاط النهاية لطلب HTTP عام مسموح به دون حساب وكيل. يتجنّب HostnameEndpoint أيضًا تضمين اسم المضيف في سلسلة تكوين أخرى مفصولة بنقطتين.

هذا يحوّل مدخل التوجيه فقط. لا تصبح بيانات الاعتماد المضمّنة في عنوان URL ترويسة تفويض لمجرد تحليل المضيف والمنفذ. قدّم أي مصادقة وكيل مدعومة مطلوبة عبر ترتيب مصادقة الطلب. لوجهة HTTP بسيطة ووسيط يقدّم Basic، توفّر ترويسات طلب Basic في ProxyAgent أحد هذه الترتيبات.

يتطلب عنوان URL لوكيل HTTPS اتصالًا قادرًا على TLS بالوكيل. ويتطلب عنوان URL لـ SOCKS تفاوض SOCKS. لا يُنفَّذ أي منهما بإرسال تلك المخططات إلى تحويل نقطة نهاية HTTP ProxyAgent بسيط.

مقالات ذات صلة