Python ftplib超时

时间:2010-08-10 17:43:09

标签: 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 个答案:

答案 0 :(得分:12)

很可能是主动和被动模式之间的冲突。确保满足以下条件之一:

  1. 服务器支持PASV模式,而您的客户端正在设置PASV模式
  2. 如果服务器不支持被动模式,则防火墙必须支持主动模式FTP传输。
  3. 编辑:我查看了文档,发现在Python 2.1及更高版本中默认为被动模式。你在说什么服务器,你知道它是否支持被动模式?

    在主动模式(非PASV)中,客户端发送一个PORT命令,告诉服务器在该端口上启动DATA连接,这要求您的防火墙知道PORT命令,以便它可以将传入的DATA连接转发给您 - - 很少有防火墙支持这一点。在被动模式下,客户端打开DATA连接,服务器使用它(服务器在打开数据连接时是“被动的”)。

    如果您没有使用被动模式,请执行ftp.set_pasv(True)并查看是否会产生影响。

答案 1 :(得分:12)

如果被动模式由于某种原因失败,请尝试:

ftp.set_pasv(False)

使用主动模式。