gpt4 book ai didi

python - FTP 上传文件手动工作,但使用 Python ftplib 失败

转载 作者:太空狗 更新时间:2023-10-30 00:00:39 24 4
gpt4 key购买 nike

我在 Debian 机器上安装了 vsFTP。使用ftp命令手动上传文件时,没问题。即,以下 session 有效:

john@myhost:~$ ftp xxx.xxx.xxx.xxx 5111Connected to xxx.xxx.xxx.xxx.220 Hello,Welcom to my FTP server.Name (xxx.xxx.xxx.xxx:john): ftpuser331 Please specify the password.Password:230 Login successful.Remote system type is UNIX.Using binary mode to transfer files.ftp> put st.ziplocal: st.zip remote: st.zip200 PORT command successful. Consider using PASV.150 Ok to send data.226 File receive OK.12773 bytes sent in 0.00 secs (277191.8 kB/s)ftp> 221 Goodbye.

(请注意,如上所述,出于某种原因,我将 vsFTP 服务器配置为使用非默认端口,例如 5111)

现在,当我用 python 编写脚本以编程方式上传文件时,它失败了。错误显示“超时”,如以下 session 所示:

john@myhost:~$ ipythonPython 2.5.2 (r252:60911, Jan 24 2010, 14:53:14) Type "copyright", "credits" or "license" for more information.IPython 0.8.4 -- An enhanced Interactive Python.?         -> Introduction and overview of IPython's features.%quickref -> Quick reference.help      -> Python's own help system.object?   -> Details about 'object'. ?object also works, ?? prints more.In [1]: import ftplibIn [2]: ftp=ftplib.FTP()                                                    In [3]: ftp.connect('xxx.xxx.xxx.xxx','5111')                                Out[3]: "220 Hello,Welcom to my FTP server."In [4]: ftp.login('ftpuser','ftpuser')                              Out[4]: '230 Login successful.'In [5]: f=open('st.zip','rb')                              In [6]: ftp.storbinary('STOR %s' % 'my_ftp_file.zip', f)                            ---------------------------------------------------------------------------error                                     Traceback (most recent call last).../usr/lib/python2.5/ftplib.pyc in ntransfercmd(self, cmd, rest)    322             af, socktype, proto, canon, sa = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM)[0]    323             conn = socket.socket(af, socktype, proto)--> 324             conn.connect(sa)    325             if rest is not None:    326                 self.sendcmd("REST %s" % rest)/usr/lib/python2.5/socket.pyc in connect(self, *args)error: (110, 'Connection timed out')

我猜我的 vsFTP 服务器配置有误,但无法解决。任何人都可以帮忙吗?

我的 vsFTP 配置是:

listen=YESconnect_from_port_20=YESlisten_port=5111ftp_data_port=5110# Passive FTP mode allowedpasv_enable=YESpasv_min_port=5300pasv_max_port=5400max_per_ip=2

最佳答案

在您尝试发送数据之前不会发生超时,因此您能够成功连接到服务器。我看到的唯一区别是 ftplib 默认使用被动模式,而您的命令行客户端似乎没有。尝试做

ftp.set_pasv(False)

在开始传输之前看看会发生什么。

请注意,非被动模式基本上已过时,因为它不能跨 NAT 防火墙使用,因此您可能应该配置 vsFTP 以允许被动模式。

关于python - FTP 上传文件手动工作,但使用 Python ftplib 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3349722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com