PycURL mengekspos dukungan FTP dan SOCKS libcurl melalui satu handle transfer. Pada unduhan FTP pasif, aplikasi dapat menyerahkan koneksi kontrol maupun koneksi data yang terpisah kepada implementasi tersebut.

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 adalah URL sumber daya FTP aplikasi, dan output adalah aliran keluaran biner yang sudah terbuka. Batas waktu adalah contoh batas yang dipilih sesuai perkiraan ukuran berkas dan koneksi. Untuk sumber daya FTP publik yang mengizinkan perantara publik, daftar proksi SOCKS5 menawarkan kandidat untuk URL proksi; pastikan simpul yang dipilih mengizinkan tujuan kontrol maupun tujuan data pasif.

socks5h mendelegasikan resolusi nama host tujuan kepada proksi SOCKS. NOPROXY sengaja dikosongkan agar setelan lingkungan no_proxy yang diwarisi tidak melewati rute untuk transfer ini.

Biarkan FTP aktif dinonaktifkan: mode itu menunggu koneksi masuk dari server dan tidak tersedia pada mode proksi ini. Kebijakan keluar proksi harus mengizinkan porta kontrol FTP dan porta data pasif yang dipilih untuk transfer. Jadi keberhasilan login saja tidak membuktikan berkas dapat diunduh.

Bila autentikasi diperlukan, gunakan PROXYUSERNAME dan PROXYPASSWORD PycURL untuk perantara; kredensial server FTP termasuk dalam koneksi FTP.

Artikel terkait