PycURL के साथ SOCKS से FTP डाउनलोड
libcurl को SOCKS5 प्रॉक्सी के ज़रिए FTP डाउनलोड का नियंत्रण और निष्क्रिय डेटा कनेक्शन संभालने दें।
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 एप्लिकेशन का FTP संसाधन URL है, और output पहले से खुली बाइनरी आउटपुट स्ट्रीम है। टाइमआउट अपेक्षित फ़ाइल आकार और कनेक्शन के अनुसार चुनने योग्य उदाहरण सीमाएँ हैं। ऐसे सार्वजनिक FTP संसाधन के लिए जहाँ सार्वजनिक मध्यस्थ अनुमत हैं, SOCKS5 प्रॉक्सी सूची प्रॉक्सी URL के लिए उम्मीदवार देती है; जाँचें कि चुना गया नोड नियंत्रण और निष्क्रिय डेटा दोनों गंतव्यों की अनुमति देता है।
socks5h गंतव्य होस्टनाम का रिज़ॉल्यूशन SOCKS प्रॉक्सी को सौंपता है। NOPROXY जानबूझकर खाली है ताकि विरासत में मिली no_proxy पर्यावरण सेटिंग इस ट्रांसफ़र का मार्ग न चकमा दे।
सक्रिय FTP बंद ही रखें: यह सर्वर से आने वाले कनेक्शन की अपेक्षा करता है और इस प्रॉक्सी मोड में उपलब्ध नहीं है। प्रॉक्सी की आउटबाउंड नीति को FTP नियंत्रण पोर्ट और ट्रांसफ़र के लिए चुने गए निष्क्रिय डेटा पोर्ट की अनुमति देनी चाहिए। इसलिए केवल सफल लॉगिन यह सिद्ध नहीं करता कि फ़ाइल डाउनलोड हो सकती है।
जब प्रमाणीकरण आवश्यक हो, तो मध्यस्थ के लिए PycURL के PROXYUSERNAME और PROXYPASSWORD का उपयोग करें; FTP सर्वर के क्रेडेंशियल FTP कनेक्शन के अंतर्गत आते हैं।