Python ftplib 超时

发布于 2024-09-13 21:58:18 字数 476 浏览 7 评论 0原文

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

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

I'm trying to use ftplib to get a file listing and download any new files since my last check. The code I'm trying to run so far is:

#!/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() 

Whenever I run this it times out when I try to retrieve the listing. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

┼── 2024-09-20 21:58:18

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

ftp.set_pasv(False)

使用主动模式。

If Passive Mode is failing for some reason try:

ftp.set_pasv(False)

to use Active Mode.

泅人 2024-09-20 21:58:18

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

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

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

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

万一您不使用被动模式,请执行 ftp.set_pasv(True) 并查看是否有影响。

Most likely a conflict between Active and Passive mode. Make sure that one of the following is true:

  1. The server supports PASV mode and your client is setting PASV mode
  2. If the server does not support passive mode, then your firewall must support active mode FTP transfers.

EDIT: I looked at the docs, and found that in Python 2.1 and later the default is passive mode. What server are you talking to, and di you know if it supports passive mode?

In active mode (non-PASV) the client sends a PORT command telling the server to initiate the DATA connection on that port, which requires your firewall be aware of the PORT command so it can forward the incoming DATA connection to you -- few firewalls support this. In passive mode the client opens the DATA connection and the server uses it (the server is "passive" in opening the data connection).

Just in case you're not using passive mode, do a ftp.set_pasv(True) and see if that makes a difference.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文