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 კავშირს ეკუთვნის.

დაკავშირებული სტატიები