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-злучэнню.

Падобныя артыкулы