我正在尝试使用 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() 

每当我运行此命令时,当我尝试检索列表时就会超时。有任何想法吗?

有帮助吗?

解决方案

最有可能的是主动模式和被动模式之间的冲突。确保以下其中一项为真:

  1. 服务器支持 PASV 模式,您的客户端正在设置 PASV 模式
  2. 如果服务器不支持被动模式,则您的防火墙必须支持主动模式 FTP 传输。

编辑:我查看了文档,发现在Python 2.1及更高版本中默认是被动模式。您正在与什么服务器通信,您知道它是否支持被动模式吗?

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

万一您不使用被动模式,请执行以下操作 ftp.set_pasv(True) 看看这是否有影响。

其他提示

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

ftp.set_pasv(False)

使用Active模式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top