Một giá trị proxy thông thường như http://proxy.example:8080 là một URL. clientFromString của Twisted chấp nhận mô tả điểm cuối, chẳng hạn tcp:host=proxy.example:port=8080. Hai chuỗi mô tả thông tin liên quan bằng ngữ pháp khác nhau.

Nếu ứng dụng chấp nhận URL proxy HTTP thông thường, hãy phân tách nó trước khi tạo điểm cuối:

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)

Đoạn mã giả định ứng dụng đã có reactor của riêng nó. Chỉ định cổng proxy thực tế trong cấu hình khi nó không phải mặc định của URL HTTP. Danh sách proxy HTTP cung cấp các ứng viên điểm cuối cho một yêu cầu HTTP công khai được phép mà không cần tài khoản proxy. HostnameEndpoint cũng tránh nhúng tên máy chủ vào một chuỗi cấu hình khác phân tách bằng dấu hai chấm.

Điều này chỉ chuyển đổi đầu vào định tuyến. Thông tin đăng nhập được nhúng trong URL không trở thành tiêu đề ủy quyền chỉ vì máy chủ và cổng đã được phân tách. Cung cấp mọi xác thực proxy được hỗ trợ cần thiết thông qua cơ chế xác thực của yêu cầu. Đối với đích HTTP thông thường và trung gian cung cấp Basic, các tiêu đề yêu cầu Basic của ProxyAgent cung cấp một cơ chế như vậy.

URL proxy HTTPS yêu cầu kết nối tới proxy có khả năng TLS. URL SOCKS yêu cầu thương lượng SOCKS. Cả hai đều không được triển khai bằng cách gửi các lược đồ đó vào một chuyển đổi điểm cuối HTTP ProxyAgent đơn giản.

Bài viết liên quan