Soket Python mentah tidak berunding proksi semata-mata kerana http_proxy wujud. Untuk aplikasi yang bercakap protokol TCP sendiri, gunakan penyambung yang memahami perkhidmatan di titik akhir proksi.

Dengan PySocks sudah tersedia, cipta sambungan secara eksplisit:

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.

Gantikan alamat dokumentasi dan port destinasi. Untuk destinasi awam yang dibenarkan, pilih calon daripada senarai proksi SOCKS5 hanya selepas memeriksa bahawa ia membenarkan port sasaran aplikasi. Periksa pakej yang dipasang, kaedah yang disokong dan keperluan titik akhir terhadap antara muka PySocks.

Baki aplikasi menukar protokolnya melalui sambungan yang telah diwujudkan ini. Jika protokol itu menggunakan TLS, mulakannya selepas rundingan proksi dan sahkan nama hos destinasi sebenar. Pengesahan proksi mewujudkan laluan; ia tidak menyediakan log masuk destinasi atau penyulitan.

Pendengar SOCKS memerlukan rundingan SOCKS. Perkhidmatan HTTP memerlukan penyambung berkemampuan CONNECT untuk destinasi TCP sewenang-wenangnya dan mungkin menolak portnya. Pilih penyambung daripada perkhidmatan yang benar-benar ditawarkan, bukan menukar alamat sambil membiarkan jabat tangan yang salah.

Kekalkan penggantian secara setempat. Memberi kelas kepada socket.socket boleh menjejaskan import dan pustaka yang tidak berkaitan. Jika pustaka lain memiliki penciptaan soket, gunakan kilang sambungan atau pilihan proksi yang didokumenkan; kamus yang tidak pernah dibacanya tidak boleh mengubah sambungan itu.

Artikel berkaitan