You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python ftplib连接TLS显式加密FTP服务器无法列出文件目录

解决FTP_TLS无法获取文件目录的问题

这是显式TLS FTP连接里非常典型的问题——你已经搞定了控制通道的加密,但数据通道还没启用加密,服务器拒绝了明文数据连接,导致代码卡在数据传输的步骤上。

问题分析

当你调用FTP_TLS.login()登录后,只有用来发送命令、接收基础响应的控制通道被加密了。但retrlines、nlst这类获取文件列表的操作,需要建立数据通道来传输实际的列表内容,默认情况下这个通道是明文的。很多严格配置的TLS FTP服务器会拒绝这种明文数据连接,导致transfercmd一直等待服务器响应,代码就卡在这里了。

修复后的代码

你需要在登录后显式启用数据通道的TLS加密,同时确保使用被动模式(大部分服务器都要求这个):

from ftplib import FTP_TLS

ftps = FTP_TLS('HOST')
ftps.login('USER', 'PASS')
# 关键步骤:为数据通道启用TLS加密
ftps.prot_p()
# 启用被动模式,避免防火墙阻止数据连接
ftps.set_pasv(True)
ftps.cwd('path/to/files/')
print(ftps.sendcmd('PWD'))  # 确认当前路径
ftps.retrlines('LIST')      # 现在应该能正常获取目录列表了

额外说明

  1. 关于prot_p():你之前的代码里已经写了这个方法,它的作用是切换数据通道到TLS加密模式,确保后续所有数据传输都符合服务器的加密要求。如果你的代码里这个方法名拼写有误(比如少了字母),一定要修正,这是解决问题的核心。
  2. 被动模式:如果你的网络环境有防火墙,主动模式的数据连接可能被拦截,所以set_pasv(True)几乎是必须的,绝大多数公共FTP服务器都只支持被动模式。
  3. 调试技巧:如果还是遇到问题,可以开启调试日志:ftps.set_debuglevel(2),这样能看到所有发送的命令和服务器的响应,方便排查具体哪里出了问题。

内容的提问来源于stack exchange,提问作者mpioski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:25:25