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 সংযোগের অন্তর্গত।