PycURL เปิดเผยการรองรับ FTP และ SOCKS ของ libcurl ผ่านแฮนเดิลการถ่ายโอนเดียว ในการดาวน์โหลด FTP แบบพาสซีฟ แอปพลิเคชันสามารถปล่อยทั้งการเชื่อมต่อควบคุมและการเชื่อมต่อข้อมูลที่แยกจากกันให้กับการทำงานนั้นได้

import pycurl

transfer = pycurl.Curl()
try:
    transfer.setopt(pycurl.URL, ftp_url)
    transfer.setopt(pycurl.PROXY, "socks5h://proxy.example.net:1080")
    transfer.setopt(pycurl.NOPROXY, "")
    transfer.setopt(pycurl.WRITEDATA, output)
    transfer.setopt(pycurl.CONNECTTIMEOUT, 10)
    transfer.setopt(pycurl.TIMEOUT, 60)
    transfer.perform()
finally:
    transfer.close()

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

socks5h มอบหมายการแปลงชื่อโฮสต์ปลายทางให้พร็อกซี SOCKS NOPROXY ว่างเปล่าอย่างชัดเจนเพื่อให้การตั้งค่าสภาพแวดล้อม no_proxy ที่สืบทอดมาไม่ข้ามเส้นทางของการถ่ายโอนนี้

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

เมื่อต้องมีการพิสูจน์ตัวตน ให้ใช้ PROXYUSERNAME และ PROXYPASSWORD ของ PycURL สำหรับตัวกลาง ส่วนข้อมูลรับรองของเซิร์ฟเวอร์ FTP เป็นของการเชื่อมต่อ FTP

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