ซ็อกเก็ต Python ดิบไม่เจรจาพร็อกซีเพียงเพราะมี http_proxy สำหรับแอปพลิเคชันที่พูดโปรโตคอล TCP ของตัวเอง ให้ใช้ตัวเชื่อมต่อที่เข้าใจบริการที่ปลายทางพร็อกซี

เมื่อมี PySocks อยู่แล้ว ให้สร้างการเชื่อมต่ออย่างชัดเจน:

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.

แทนที่ที่อยู่เอกสารและพอร์ตปลายทาง สำหรับปลายทางสาธารณะที่ได้รับอนุญาต ให้เลือกผู้สมัครจากรายการพร็อกซี SOCKS5หลังจากตรวจสอบแล้วว่าเปิดพอร์ตเป้าหมายของแอปพลิเคชัน ตรวจสอบแพ็กเกจที่ติดตั้ง วิธีการที่รองรับ และข้อกำหนดของปลายทางเทียบกับอินเทอร์เฟซ PySocks

ส่วนที่เหลือของแอปพลิเคชันแลกเปลี่ยนโปรโตคอลผ่านการเชื่อมต่อที่สร้างขึ้นนี้ หากโปรโตคอลนั้นใช้ TLS ให้เริ่มหลังจากเจรจาพร็อกซีและตรวจสอบชื่อโฮสต์ปลายทางจริง การพิสูจน์ตัวตนพร็อกซีสร้างเส้นทาง แต่ไม่ได้ให้การเข้าสู่ระบบปลายทางหรือการเข้ารหัส

ผู้รับฟัง SOCKS ต้องการการเจรจา SOCKS บริการ HTTP ต้องการตัวเชื่อมต่อที่รองรับ CONNECT สำหรับปลายทาง TCP โดยพลการ และอาจปฏิเสธพอร์ตของตน เลือกตัวเชื่อมต่อตามบริการที่เสนอจริง แทนการเปลี่ยนที่อยู่แล้วปล่อยให้แฮนด์เชกผิด

ให้การแทนที่อยู่ภายในเครื่อง การกำหนดคลาสให้ socket.socket อาจส่งผลต่อการนำเข้าและไลบรารีที่ไม่เกี่ยวข้อง หากไลบรารีอื่นเป็นเจ้าของการสร้างซ็อกเก็ต ให้ใช้โรงงานเชื่อมต่อที่จัดทำเอกสารไว้หรือตัวเลือกพร็อกซีของมัน พจนานุกรมที่มันไม่เคยอ่านไม่สามารถเปลี่ยนการเชื่อมต่อนั้นได้

บทความที่เกี่ยวข้อง