我正在尝试使用ftplib来获取文件列表并下载自上次检查以来的任何新文件。我到目前为止尝试运行的代码是:
#!/usr/bin/env python
from ftplib import FTP
import sys
host = 'ftp.***.com'
user = '***'
passwd = '***'
try:
ftp = FTP(host)
ftp.login(user, passwd)
except:
print 'Error connecting to FTP server'
sys.exit()
try:
ftp.retrlines('LIST')
except:
print 'Error fetching file listing'
ftp.quit()
sys.exit()
ftp.quit()
每当我运行它时,当我尝试检索列表时它会超时。有什么想法吗?
答案 0 :(得分:12)
很可能是主动和被动模式之间的冲突。确保满足以下条件之一:
在主动模式(非PASV)中,客户端发送一个PORT命令,告诉服务器在该端口上启动DATA连接,这要求您的防火墙知道PORT命令,以便它可以将传入的DATA连接转发给您 - - 很少有防火墙支持这一点。在被动模式下,客户端打开DATA连接,服务器使用它(服务器在打开数据连接时是“被动的”)。
如果您没有使用被动模式,请执行ftp.set_pasv(True)
并查看是否会产生影响。
答案 1 :(得分:12)
如果被动模式由于某种原因失败,请尝试:
ftp.set_pasv(False)
使用主动模式。