Python ftplib 超时
我正在尝试使用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()
每次我运行这个代码时,获取文件列表的时候都会超时。有没有什么建议?
2 个回答
23
如果被动模式因为某些原因不工作,可以试试:
ftp.set_pasv(False)
使用主动模式。
14
很可能是主动模式和被动模式之间的冲突。确保以下其中一条是正确的:
- 服务器支持被动模式,而你的客户端也设置为被动模式
- 如果服务器不支持被动模式,那么你的防火墙必须支持主动模式的FTP传输。
补充一下:我查看了文档,发现从Python 2.1及以后版本,默认是被动模式。你在连接哪个服务器?你知道它是否支持被动模式吗?
在主动模式(非被动模式)下,客户端会发送一个PORT命令,告诉服务器在那个端口上建立数据连接,这就需要你的防火墙能够识别这个PORT命令,以便把进来的数据连接转发给你——但很少有防火墙支持这个功能。在被动模式下,客户端自己打开数据连接,服务器使用这个连接(服务器在打开数据连接时是“被动”的)。
如果你不确定是否在使用被动模式,可以试试执行 ftp.set_pasv(True)
,看看是否有变化。