Nilai proksi konvensional seperti http://proxy.example:8080 ialah URL. clientFromString Twisted menerima penerangan titik akhir, seperti tcp:host=proxy.example:port=8080. Kedua-dua rentetan menerangkan maklumat berkaitan dengan tatabahasa berbeza.

Jika aplikasi menerima URL proksi HTTP konvensional, uraikannya sebelum mencipta titik akhir:

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)

Serpihan itu menganggap aplikasi sudah mempunyai reactor-nya. Nyatakan port proksi sebenar dalam konfigurasi apabila ia bukan lalai URL HTTP. Senarai proksi HTTP menawarkan calon titik akhir untuk permintaan HTTP awam yang dibenarkan tanpa akaun proksi. HostnameEndpoint juga mengelakkan penyisipan nama hos ke dalam rentetan konfigurasi lain yang dipisahkan titik bertindih.

Ini hanya menukar input penghalaan. Kredensial yang tertanam dalam URL tidak menjadi pengepala kebenaran semata-mata kerana hos dan port telah diuraikan. Sediakan sebarang pengesahan proksi yang disokong dan diperlukan melalui susunan pengesahan permintaan. Untuk destinasi HTTP biasa dan perantara yang menawarkan Basic, pengepala permintaan Basic ProxyAgent menyediakan salah satu susunan tersebut.

URL proksi HTTPS memerlukan sambungan ke proksi yang menyokong TLS. URL SOCKS memerlukan rundingan SOCKS. Kedua-duanya tidak dilaksanakan dengan menghantar skema tersebut ke penukaran titik akhir HTTP ProxyAgent biasa.

Artikel berkaitan