הורדת FTP דרך SOCKS עם PycURL
השאירו ל-libcurl לנהל את חיבור הבקרה וחיבור הנתונים הפסיבי של הורדת FTP דרך פרוקסי SOCKS5.
PycURL חושף את התמיכה של libcurl ב-FTP וב-SOCKS דרך ידית העברה אחת. בהורדת 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.