دانلود 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 نشانی منبع FTP برنامه است و output یک جریان خروجی دودویی از پیش بازشده است. مهلتها حدود نمونهایاند که باید بر پایهٔ اندازهٔ فایل و اتصال مورد انتظار انتخاب شوند. برای یک منبع FTP عمومی که در آن واسطههای عمومی مجازند، فهرست پروکسیهای SOCKS5 نامزدهایی برای نشانی پروکسی پیشنهاد میکند؛ بررسی کنید که گرهٔ برگزیده هم مقصد کنترل و هم مقصد دادهٔ غیرفعال را مجاز بداند.
socks5h تجزیهٔ نام میزبان مقصد را به پروکسی SOCKS واگذار میکند. NOPROXY بهطور صریح خالی است تا تنظیم محیطی no_proxy بهارثرسیده مسیر این انتقال را دور نزند.
FTP فعال را غیرفعال بگذارید: انتظار اتصال ورودی از سرور دارد و در این حالت پروکسی در دسترس نیست. سیاست خروجی پروکسی باید پورت کنترل FTP و پورت دادهٔ غیرفعال انتخابشده برای انتقال را مجاز کند. پس ورود موفق بهتنهایی ثابت نمیکند که فایل قابل دانلود است.
وقتی احراز هویت لازم است، برای واسطه از PROXYUSERNAME و PROXYPASSWORD در PycURL استفاده کنید؛ اعتبارنامههای سرور FTP متعلق به اتصال FTP است.