Ubah URL proksi HTTP menjadi endpoint Twisted
Uraikan URL proksi HTTP konvensional menjadi host dan port alih-alih meneruskannya sebagai tata bahasa deskripsi endpoint Twisted.
Nilai proksi konvensional seperti http://proxy.example:8080 adalah URL. clientFromString Twisted menerima deskripsi endpoint, seperti tcp:host=proxy.example:port=8080. Kedua string menjelaskan informasi terkait dengan tata bahasa yang berbeda.
Jika aplikasi menerima URL proksi HTTP konvensional, uraikan sebelum membuat endpoint:
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)
Fragmen mengasumsikan aplikasi sudah memiliki reactor-nya. Tentukan port proksi sebenarnya dalam konfigurasi bila bukan default URL HTTP. Daftar proksi HTTP menawarkan kandidat endpoint untuk permintaan HTTP publik yang diizinkan tanpa akun proksi. HostnameEndpoint juga menghindari penyematan nama host ke string konfigurasi lain yang dipisahkan titik dua.
Ini hanya mengonversi masukan perutean. Kredensial yang disematkan dalam URL tidak menjadi header otorisasi hanya karena host dan port diuraikan. Sediakan autentikasi proksi yang didukung dan diperlukan melalui pengaturan autentikasi permintaan. Untuk tujuan HTTP biasa dan perantara yang menawarkan Basic, header permintaan Basic ProxyAgent menyediakan salah satu pengaturan tersebut.
URL proksi HTTPS memerlukan koneksi ke proksi yang mendukung TLS. URL SOCKS memerlukan negosiasi SOCKS. Keduanya tidak diimplementasikan dengan mengirim skema tersebut ke konversi endpoint HTTP ProxyAgent biasa.