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ức | Mô 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 managerwith FTP(...) as ftp:.