המרת כתובת URL של פרוקסי HTTP לנקודת קצה של Twisted
פרקו כתובת URL רגילה של פרוקסי HTTP למארח ולפורט במקום להעביר אותה כדקדוק תיאור נקודת הקצה של Twisted.
ערך פרוקסי רגיל כגון 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)
הקטע מניח שליישום כבר יש reactor משלו. ציינו את פורט הפרוקסי האמיתי בתצורה כאשר הוא אינו ברירת המחדל של כתובת ה-HTTP. רשימת פרוקסי ה-HTTP מציעה מועמדים לנקודות קצה לבקשת HTTP ציבורית מורשית ללא חשבון פרוקסי. HostnameEndpoint גם נמנע מהטמעת שם המארח במחרוזת תצורה נוספת המופרדת בנקודתיים.
זה ממיר רק את קלט הניתוב. פרטי גישה המוטמעים בכתובת URL אינם הופכים לכותרת הרשאה רק משום שהמארח והפורט פורקו. ספקו כל אימות פרוקסי נתמך שנדרש דרך הסדר האימות של הבקשה. עבור יעד HTTP פשוט ומתווך המציע Basic, כותרות בקשת Basic של ProxyAgent מספקות הסדר כזה.
כתובת URL של פרוקסי HTTPS דורשת חיבור לפרוקסי המסוגל ל-TLS. כתובת URL של SOCKS דורשת משא ומתן SOCKS. אף אחד מהם אינו מיושם על ידי שליחת הסכמות הללו להמרת נקודת קצה פשוטה של HTTP ProxyAgent.