การดาวน์โหลด FTP ผ่าน SOCKS ด้วย PycURL
ให้ libcurl จัดการการเชื่อมต่อควบคุมและข้อมูลแบบพาสซีฟของการดาวน์โหลด FTP ผ่านพร็อกซี SOCKS5
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