HTTP პროქსის URL-ის გარდაქმნა Twisted-ის ბოლო წერტილად
დაშალეთ ჩვეულებრივი HTTP პროქსის URL ჰოსტად და პორტად, ნაცვლად იმისა, რომ ის Twisted-ის ბოლო წერტილის აღწერის გრამატიკად გადასცეთ.
ჩვეულებრივი პროქსის მნიშვნელობა, როგორიცაა http://proxy.example:8080, არის URL. Twisted-ის clientFromString იღებს ბოლო წერტილის აღწერას, მაგალითად tcp:host=proxy.example:port=8080. ორი სტრიქონი აღწერს დაკავშირებულ ინფორმაციას სხვადასხვა გრამატიკით.
თუ აპლიკაცია იღებს ჩვეულებრივ HTTP პროქსის URL-ს, დაშალეთ ის ბოლო წერტილის შექმნამდე:
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 URL-ის ნაგულისხმევი არ არის. HTTP პროქსების სია გთავაზობთ ბოლო წერტილის კანდიდატებს დაშვებული საჯარო HTTP მოთხოვნისთვის პროქსის ანგარიშის გარეშე. HostnameEndpoint ასევე თავს არიდებს ჰოსტის სახელის სხვა ორწერტილით გამოყოფილ კონფიგურაციის სტრიქონში ჩადგმას.
ეს მხოლოდ მარშრუტიზაციის შეყვანას გარდაქმნის. URL-ში ჩადგმული სერთიფიკატები ავტორიზაციის ჰედერად არ იქცევა მხოლოდ იმიტომ, რომ ჰოსტი და პორტი დაიშალა. უზრუნველყავით ნებისმიერი საჭირო მხარდაჭერილი პროქსის ავთენტიფიკაცია მოთხოვნის ავთენტიფიკაციის მექანიზმით. ჩვეულებრივი HTTP დანიშნულებისა და Basic-ის შემომთავაზებელი შუამავლისთვის, ProxyAgent-ის Basic მოთხოვნის ჰედერები იძლევა ერთ ასეთ მექანიზმს.
HTTPS პროქსის URL მოითხოვს TLS-უნარიან კავშირს პროქსისთან. SOCKS URL მოითხოვს SOCKS მოლაპარაკებას. არც ერთი არ რეალიზდება იმ სქემების ჩვეულებრივ HTTP ProxyAgent ბოლო წერტილის გარდაქმნაში გაგზავნით.