نشانی اینترنتی پروکسی HTTP را به نقطه پایانی Twisted تبدیل کنید
نشانی اینترنتی معمول پروکسی HTTP را به میزبان و درگاه تجزیه کنید، نه اینکه آن را بهعنوان دستور زبان توصیف نقطه پایانی Twisted بفرستید.
یک مقدار پروکسی معمول مانند http://proxy.example:8080 یک نشانی اینترنتی است. clientFromString در Twisted توصیف نقطه پایانی مانند tcp:host=proxy.example:port=8080 را میپذیرد. این دو رشته اطلاعات مرتبط را با دستور زبانهای متفاوت توصیف میکنند.
اگر برنامه یک نشانی اینترنتی معمول پروکسی 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)
این قطعه فرض میکند برنامه از قبل reactor خود را دارد. وقتی درگاه پیشفرض نشانی HTTP نیست، درگاه واقعی پروکسی را در پیکربندی مشخص کنید. فهرست پروکسی HTTP نامزدهای نقطه پایانی را برای یک درخواست HTTP عمومی مجاز بدون حساب پروکسی ارائه میدهد. HostnameEndpoint همچنین از جایگذاری نام میزبان در رشته پیکربندی دیگری که با دونقطه جدا شده است اجتناب میکند.
این فقط ورودی مسیریابی را تبدیل میکند. اعتبارنامههای جایگذاریشده در نشانی اینترنتی تنها به این دلیل که میزبان و درگاه تجزیه شدهاند به سرآیند مجوز تبدیل نمیشوند. هر احراز هویت پشتیبانیشدهٔ پروکسی را که لازم است از طریق سازوکار احراز هویت درخواست فراهم کنید. برای مقصد سادهٔ HTTP و واسطهای که Basic ارائه میدهد، سرآیندهای درخواست Basic در ProxyAgent یکی از این سازوکارها را فراهم میکنند.
نشانی اینترنتی پروکسی HTTPS به اتصالی با پشتیبانی TLS به پروکسی نیاز دارد. نشانی اینترنتی SOCKS به مذاکرهٔ SOCKS نیاز دارد. هیچکدام با فرستادن این طرحها به یک تبدیل سادهٔ نقطه پایانی HTTP ProxyAgent پیادهسازی نمیشوند.