【问题标题】:Python ftplib timing outPython ftplib 超时
【发布时间】:2011-03-27 23:31:15
【问题描述】:

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

每当我运行它时,它都会在我尝试检索列表时超时。有什么想法吗?

【问题讨论】:

    标签: python ftplib


    【解决方案1】:

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

    ftp.set_pasv(False)
    

    使用主动模式。

    【讨论】:

      【解决方案2】:

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

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

      编辑:我查看了文档,发现在 Python 2.1 及更高版本中默认为被动模式。你在和哪个服务器说话,你知道它是否支持被动模式吗?

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

      以防万一您不使用被动模式,请发送ftp.set_pasv(True) 看看是否有影响。

      【讨论】:

      • 你是对的,这是模式的问题。我试图与之交谈的服务器需要 Active。感谢您的帮助!
      猜你喜欢
      • 2021-04-09
      • 1970-01-01
      • 2016-10-14
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多