socks.set_default_proxy() เก็บค่าตั้งต้นไว้สำหรับออบเจ็กต์ socksocket ของ PySocks ในอนาคต มันไม่ได้แทนที่คลาส socket พื้นฐานของ Python ดังนั้นจึงไม่ได้เปลี่ยนเส้นทางของ ftplib เพียงเพราะการเรียกเกิดขึ้นก่อนการเชื่อมต่อ FTP

ให้ติดตาม constructor ไม่ใช่ตัวแปรที่เก็บ URL ของพร็อกซี ftplib สร้างการเชื่อมต่อควบคุมและยังสร้างการเชื่อมต่อสำหรับการถ่ายโอนเพิ่มเติม ใน FTP แบบ passive การเข้าสู่ระบบสำเร็จพิสูจน์เพียงว่าการเชื่อมต่อควบคุมทำงานได้ socket ข้อมูลที่ใช้สำหรับการแสดงรายการหรือการถ่ายโอนไฟล์ก็ต้องไปตามเส้นทางที่ต้องการเช่นกัน

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

คลาสย่อย ftplib ที่เขียนเองสามารถครอบคลุมเส้นทางการเชื่อมต่อได้ แต่ส่วนภายในที่คัดลอกมาจะพาค่าสมมติของเวอร์ชัน Python ที่มันมาจากมาด้วย รวมถึง sentinel ของ timeout และการจัดการโปรโตคอล การอัปเดตไลบรารีมาตรฐานไม่ได้อัปเดตสำเนานั้น

เลือกไคลเอนต์ที่ยังได้รับการดูแลหรือการผสานรวมที่รองรับสำหรับพร็อกซีและโหมด FTP ที่ต้องการ ตัวอย่างการดาวน์โหลด FTP แบบ passive ด้วย PycURL แสดงเส้นทางไคลเอนต์อีกแบบหนึ่ง สำหรับการปรับแต่งที่แอปพลิเคชันเป็นเจ้าของ ให้ระบุว่า constructor ใดเปิด socket ควบคุมและ socket ข้อมูลแต่ละตัว และรักษาพฤติกรรมต้นทางที่มันแทนที่ ค่าพร็อกซีที่ถูกต้องมีประโยชน์ก็ต่อเมื่อ constructor เหล่านั้นใช้งานค่านั้นจริง

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