แปลง 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 ของตัวเองอยู่แล้ว ระบุพอร์ตพร็อกซีจริงในการกำหนดค่าเมื่อไม่ใช่ค่าเริ่มต้นของ URL HTTP รายการพร็อกซี HTTP เสนอผู้สมัครปลายทางสำหรับคำขอ HTTP สาธารณะที่ได้รับอนุญาตโดยไม่มีบัญชีพร็อกซี HostnameEndpoint ยังหลีกเลี่ยงการฝังชื่อโฮสต์ลงในสตริงการกำหนดค่าอื่นที่คั่นด้วยเครื่องหมายทวิภาค
สิ่งนี้แปลงเฉพาะอินพุตการกำหนดเส้นทาง ข้อมูลรับรองที่ฝังใน URL ไม่ได้กลายเป็นส่วนหัวการอนุญาตเพียงเพราะแยกโฮสต์และพอร์ตแล้ว ให้การรับรองความถูกต้องของพร็อกซีที่รองรับตามที่ต้องการผ่านการจัดการการรับรองความถูกต้องของคำขอ สำหรับปลายทาง HTTP ธรรมดาและตัวกลางที่เสนอ Basic ส่วนหัวคำขอ Basic ของ ProxyAgent ให้การจัดการดังกล่าว
URL ของพร็อกซี HTTPS ต้องมีการเชื่อมต่อกับพร็อกซีที่รองรับ TLS URL ของ SOCKS ต้องมีการเจรจา SOCKS ทั้งสองไม่ได้ถูกนำไปใช้โดยการส่งสคีมาเหล่านั้นไปยังการแปลงปลายทาง HTTP ProxyAgent ธรรมดา