【发布时间】:2016-01-31 00:35:33
【问题描述】:
我正在尝试使用 ftps 将文件发送到 FTP 服务器。登录和更改目录工作:
import ftplib
ftps = ftplib.FTP_TLS('host','user','pwd')
ftps.set_pasv(True)
ftps.prot_p()
ftps.cwd('/target_directory')
但是当我尝试上传我的文件时:
file = open(file, 'rb')
send_cmd = 'STOR file_name.txt'
ftps.storbinary(send_cmd, file)
file.close()
ftps.quit()
我收到以下错误:
File "/script/location/script.py", line 161, in <module>
ftps.storbinary(send_cmd,file)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.py", line 772, in storbinary
return self.voidresp()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.py", line 229, in voidresp
resp = self.getresp()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.py", line 222, in getresp
raise error_temp, resp
ftplib.error_temp: 425 Unable to build data connection: Operation not permitted
我了解到 425 响应代码通常是处于活动模式的结果,这就是我包含 ftps.set_pasv(True) 的原因(尽管默认情况下为 True)。
我也尝试过使用ftps.retrlines('LIST') 列出目录内容,但得到了基本相同的错误。我正在使用 Python 2.7.10。任何帮助将不胜感激。
【问题讨论】:
-
您是否有权访问 FTP 服务器的日志?我怀疑是服务器端的某些东西导致了“无法建立数据连接”错误。鉴于您使用的是 FTPS,它可能类似于
vsftpd或proftpd拒绝 TLS 数据连接除非数据连接上的 TLS 会话是与用于控制连接的 TLS 会话相同。