Μετατροπή 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.