Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

FTP protocol client trong Python (ftplib)

Module ftplib cung cấp lớp FTP triển khai client-side của giao thức FTP.

Thiết lập kết nối

from ftplib import FTP
ftp = FTP('hostname')  # hoặc ftp.connect('host', port=21)

Các phương thức phổ biến

Phương thứcMô tả
connect(host, port=21)Kết nối đến host:port
getwelcome()Thông điệp chào mừng từ server
login(user='anonymous', passwd='', acct='')Đăng nhập (mặc định anonymous)
retrbinary(cmd, callback, blocksize=8192, rest=None)Tải file binary (cmd='RETR filename')
storbinary(cmd, fp, blocksize=8192, callback=None, rest=None)Gửi file binary (cmd='STOR filename')
dir()Liệt kê thư mục (LIST command)
delete(filename)Xóa file trên server
cwd(pathname)Thay đổi thư mục hiện tại
mkd(pathname)Tạo thư mục mới
pwd()Trả về thư mục hiện tại
rmd(dirname)Xóa thư mục
size(filename)Kích thước file (byte)
quit()Gửi QUIT và đóng kết nối

Ví dụ: Tải và gửi file (anonymous)

from ftplib import FTP
import os

def download_file(ftp, filename, local_filename=None):
    local_filename = local_filename or filename
    with open(local_filename, 'wb') as f:
        ftp.retrbinary(f'RETR {filename}', f.write)
    print(f"Downloaded {filename}")

def upload_file(ftp, local_path, remote_filename=None):
    remote_filename = remote_filename or os.path.basename(local_path)
    with open(local_path, 'rb') as f:
        ftp.storbinary(f'STOR {remote_filename}', f)
    print(f"Uploaded {remote_filename}")

with FTP("ftp1.at.proftpd.org") as ftp:
    ftp.login()                    # anonymous login
    print(ftp.getwelcome())
    ftp.dir()
    download_file(ftp, 'README.MIRRORS')
    upload_file(ftp, '/home/user/file.txt')

Chế độ Passive vs Active

  • Mặc định: Passive mode (PASV) - phù hợp firewall/NAT.
  • Ép Active mode: ftp.set_pasv(False).

FTP_TLS (FTPS - FTP over SSL/TLS)

from ftplib import FTP_TLS

ftps = FTP_TLS('host')
ftps.login('user', 'pass')
ftps.prot_p()  # Bảo vệ kênh dữ liệu
# dùng như FTP bình thường
ftps.quit()

Lưu ý bảo mật

  • FTP truyền dữ liệu và mật khẩu dạng plaintext -> dùng FTP_TLS hoặc SFTP (qua SSH, module paramiko).
  • Đóng kết nối đúng cách với quit() hoặc context manager with FTP(...) as ftp:.