Konektor Sadar-SOCKS untuk Socket TCP Python
Pilih konektor socket yang memahami proxy dan jaga cakupannya terpisah dari implementasi socket seluruh proses Python.
Socket Python mentah tidak menegosiasikan proxy hanya karena http_proxy ada. Untuk aplikasi yang berbicara protokol TCP-nya sendiri, gunakan konektor yang memahami layanan di titik akhir proxy.
Dengan PySocks sudah tersedia, buat koneksi 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.
Ganti alamat dokumentasi dan port tujuan. Untuk tujuan publik yang diizinkan, pilih kandidat dari daftar proxy SOCKS5 hanya setelah memeriksa bahwa ia mengizinkan port target aplikasi. Periksa paket yang terpasang, metode yang didukung, dan persyaratan titik akhir terhadap antarmuka PySocks.
Sisa aplikasi menukar protokolnya melalui koneksi yang sudah terjalin ini. Jika protokol itu menggunakan TLS, mulai setelah negosiasi proxy dan verifikasi nama host tujuan yang sebenarnya. Autentikasi proxy menetapkan rute; itu tidak menyediakan login tujuan atau enkripsi.
Pendengar SOCKS membutuhkan negosiasi SOCKS. Layanan HTTP membutuhkan konektor yang mendukung CONNECT untuk tujuan TCP arbitrer dan dapat menolak portnya. Pilih konektor berdasarkan layanan yang benar-benar ditawarkan, bukan mengubah alamat sambil meninggalkan jabat tangan yang salah.
Jaga penggantian tetap lokal. Menetapkan kelas ke socket.socket dapat memengaruhi impor dan pustaka yang tidak terkait. Jika pustaka lain memiliki pembuatan socket, gunakan pabrik koneksi atau opsi proxy yang didokumentasikannya; kamus yang tidak pernah dibacanya tidak dapat mengubah koneksi itu.