SOCKS-osviješteni konektor za Python TCP utičnice
Odaberite konektor utičnice koji razumije proxy i držite njegov opseg odvojenim od Pythonove procesne implementacije utičnica.
Sirova Python utičnica ne pregovara proxy zato što postoji http_proxy. Za aplikaciju koja govori vlastiti TCP protokol upotrijebite konektor koji razumije uslugu na proxy krajnjoj točki.
Kada je PySocks već dostupan, stvorite vezu izričito:
import socks
with socks.socksocket() as connection:
connection.set_proxy(socks.SOCKS5, '203.0.113.10', 1080)
connection.settimeout(10)
connection.connect(('example.com', 12345))
# Exchange the destination protocol here.
Zamijenite dokumentacijsku adresu i odredišni port. Za dopušteno javno odredište odaberite kandidata s popisa SOCKS5 proxyja tek nakon što provjerite dopušta li ciljni port aplikacije. Provjerite instalirani paket, podržane metode i zahtjeve krajnje točke prema PySocks sučelju.
Ostatak aplikacije razmjenjuje svoj protokol preko ove uspostavljene veze. Ako taj protokol koristi TLS, pokrenite ga nakon pregovora proxyja i provjerite stvarno ime odredišnog hosta. Autentifikacija proxyja uspostavlja rutu; ne pruža prijavu na odredište ni šifriranje.
SOCKS slušatelj treba SOCKS pregovor. HTTP usluga treba konektor koji podržava CONNECT za proizvoljno TCP odredište i može odbiti njegov port. Odaberite konektor prema usluzi koja se stvarno nudi, umjesto da mijenjate adresu ostavljajući pogrešan handshake.
Zamjenu držite lokalnom. Dodjeljivanje klase socket.socket može utjecati na nepovezane uvoze i biblioteke. Ako druga biblioteka upravlja stvaranjem utičnica, upotrijebite njezinu dokumentiranu tvornicu veza ili proxy opciju; rječnik koji nikada ne čita ne može promijeniti tu vezu.