首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python ftplib超时

Python ftplib超时
EN

Stack Overflow用户
提问于 2010-08-11 01:43:09
回答 2查看 17.2K关注 0票数 11

我正在尝试使用ftplib来获取文件列表,并下载自上次检查以来的任何新文件。到目前为止,我尝试运行的代码是:

代码语言:javascript
复制
#!/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() 

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-11 02:27:03

很可能是主动和被动模式之间的冲突。确保以下情况之一为真:

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

编辑:我查看了文档,发现Python2.1和更高版本的默认模式是被动模式。您正在与哪台服务器交谈,您是否知道它是否支持被动模式?

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

以防你没有使用被动模式,做一个ftp.set_pasv(True),看看这是否有什么不同。

票数 13
EN

Stack Overflow用户

发布于 2012-03-22 15:19:39

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

代码语言:javascript
复制
ftp.set_pasv(False)

使用活动模式。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3451817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档