【问题标题】:Python ftplib not logging in to FileZilla serverPython ftplib 未登录到 FileZilla 服务器
【发布时间】:2023-05-25 16:47:02
【问题描述】:

我正在尝试将 Python 中的文件上传到 ftp.scratso.com 上的 FileZilla FTP 服务器,但是我不断收到此错误:

Traceback (most recent call last):
File "PythianRealms.py", line 2332, in <module>
  ftp = ftplib.FTP("ftp.scratso.com", "PythianRealms", "password")
File "C:\Python32\lib\ftplib.py", line 115, in __init__
  self.login(user, passwd, acct)
File "C:\Python32\lib\ftplib.py", line 400, in login
  resp = self.sendcmd('USER ' + user)
File "C:\Python32\lib\ftplib.py", line 255, in sendcmd
  return self.getresp()
File "C:\Python32\lib\ftplib.py", line 230, in getresp
  raise error_proto(resp)
ftplib.error_proto:  written by Tim Kosse (Tim.Kosse@gmx.de)

我已尝试寻找解决方案,但在其他地方没有发现此问题。

代码是这样的(密码已更改):

ftp = ftplib.FTP("ftp.scratso.com", "PythianRealms", "password")
mapsock = urllib.request.urlopen("http://92.234.196.233/launcher-version.txt")
mapnum = str(mapsock.read()).split("'")[1]
mapsock.close()
f = open("tempmap.txt", "rb")
ftp.storbinary("STOR "+mapnum+".prm", f)
f.close()
ftp.quit()

任何帮助将不胜感激。

谢谢。

编辑:在服务器日志中显示:

(000185)13/09/2015 11:47:38 - (not logged in) (92.234.196.233)> 220 FileZilla Server version 0.9.41 beta written by Tim Kosse (Tim.Kosse@gmx.de) Please visit http://sourceforg
(000185)13/09/2015 11:47:38 - (not logged in) (92.234.196.233)> USER PythianRealms
(000185)13/09/2015 11:47:38 - (not logged in) (92.234.196.233)> 331 Password required for pythianrealms

【问题讨论】:

    标签: python python-3.x ftp filezilla ftplib


    【解决方案1】:

    服务器发回以下欢迎消息:

    220 FileZilla Server version 0.9.41 beta\r
    written by Tim Kosse (Tim.Kosse@gmx.de)\r
    Please visit http://sourceforg\r\n
    

    这是一个非常奇怪的欢迎信息,因为它是一种多行但不是正确的多行。这些行仅由 \r 而不是 \r\n 分隔,并且它不遵循用于 FTP 多行响应的标准,即第一行应该是“220-....”,最后一行应该是“ 220 ...”。

    虽然我看不到RFC 959 中响应的单行内允许的字符的明确定义@ 文本通常被定义为不包括除行尾之外的 \r 等控制字符。因此,ftplib 无法正确处理这种奇怪的响应也就不足为奇了。

    【讨论】:

    • 我已将服务器日志添加到问题中,因为日志显示它发送“220”。另外,我发现一个配置设置允许我更改“欢迎消息”,但不知道如何处理它。
    • 另外,不是我写的,是FileZilla服务器。
    • @Scratso:你是对的,但是服务器的响应很奇怪。建议你看看服务器的配置,肯定有问题。
    • 好的,我删除了欢迎信息,将其恢复为默认值,现在可以登录了。显然有些东西没有出现在应该是......谢谢的新行上。
    • 在默认配置下,FileZilla 服务器以\r\n 分隔行,并在每一行正确地加上220 前缀。服务器一定是配置错误。可能如果将配置中的\r\n 替换为\r,它会使服务器检测不到新行并将整个消息作为单行发送。