python自带库ftplib对ftp的连接提供了支持。下面是其基本的语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| ftp = ftplib.FTP(timeout=300) ftp = ftplib.FTP_TLS(timeout=300)
ftp.connect(host, port) ftp.login(username, password) ftp.mkd('/abc') ftp.dir() ftp.nlst() ftp.cwd('') ftp.pwd() ftp.rmd(dirname) ftp.delete(filename) ftp.rename(fromname, toname) ftp.close() ftp.voidcmd('NOOP')
local_file_handler = open('test.txt', 'rb') ftp.storbinary("STOR " + os.path.join(remote_path, filename), local_file_handler)
local_file_handler = open('test.txt', 'rb') ftp.retrbinary("RETR " + os.path.join(remote_path, filename), file_handler.write) local_file_handler.seek(0)
|
Troubleshooting
- ftplib出现ssl.SSLError: [SSL] internal error (_ssl.c:1123): 我的情况是服务器的ssl版本太高了(ubuntu20.04),并且目标FTPS服务器的ssl版本太低了,看论坛好像确实是有这么一个bug,在python方面没有找到解决方案,最终找到几个命令行工具来完成需求:
上传使用的是ftp-uploader
,直接用apt
命令安装的;下载则是用的lftp
,但是参数比较多: `1 2
| /usr/bin/lftp -c 'set ftp:ssl-allow true ; set ssl:priority NORMAL:+VERS-TLS1.1:+VERS-TLS1.2; set ssl:verify-certificate no; open -u 用户名,密码 -e "cd 目录; mget 文件名; quit" 目标服务器
|
扩展