Изтегляне по 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 връзката.