【问题标题】:Exception handling using ftplib package in Python在 Python 中使用 ftplib 包进行异常处理
【发布时间】:2021-02-24 10:06:02
【问题描述】:

我是 Python 中 ftplib 和 FTP 的新手,我正在测试文档提供的一个简单脚本:https://docs.python.org/3/library/ftplib.html#ftplib.error_reply

try:
    ftp = ftplib.FTP('ftp.us.debian.org')
    ftp.login('111', '111')
except ftplib.all_errors as err:
    print(f'Error: ' + str(err))

这返回Error: 503 Login with USER first.,如果我添加ftp.set_debuglevel(2),这将告诉我更详细的信息:

*cmd* 'USER 111'
*put* 'USER 111\r\n'
*get* '331 This FTP server is anonymous only.\n'
*resp* '331 This FTP server is anonymous only.'
*cmd* 'PASS ***'
*put* 'PASS ***\r\n'
*get* '503 Login with USER first.\n'
*resp* '503 Login with USER first.'
Error: 503 Login with USER first.

它告诉我其他信息,例如This FTP server is anonymous only。

所以我也试过了:

try:
    ftp = ftplib.FTP('ftp.us.debian.org')
except ftplib.all_errors as err:
    print(f'Error: ' + str(err))
try:
    #ftp.set_debuglevel(2)
    ftp.login('111', '111')
except ftplib.all_errors as err:
    print(f'Error: ' + str(err))

这仍然不会告诉我This FTP server is anonymous only 我想知道我是否遗漏了什么,有人可以告诉我为 FTP 进行异常处理的最佳做法是什么?有什么例子吗?非常感谢。

【问题讨论】:

    标签: python exception ftp ftplib


    【解决方案1】:

    该错误与ftplib 无关,而是与所谓的 ftp 匿名模式有关。

    FTP 是一个相当古老的协议,它要求客户端向服务器提供凭据。它不适合公共服务器,因此特殊的ftp 或anonymous(*) 用户用于匿名 日志记录(这对于大多数FTP 服务器是可选的)。用法是传递 ftp 作为密码或用户邮件地址,让服务器管理员知道谁使用了他们的服务。

    所以在这里你应该使用:

    try:
        ftp = ftplib.FTP('ftp.us.debian.org')
        ftp.login('ftp', 'ftp')     # or ftp.login('anonymous', 'guest')
    except ftplib.all_errors as err:
        print(f'Error: ' + str(err))
    

    RFC 1635 只定义用户anonymous 并推荐guest 密码,但我使用的大多数服务器也接受ftp

    【讨论】:

    • 那么这与我在原始问题中发布的第一块代码完全相同?
    • @Cecilia: 除了我的代码使用匿名 ftp用户名...
    • @MartinPrikryl:我一直使用ftp,但你是对的,RFC 1635 提到了anonymous。帖子已编辑...
    猜你喜欢
    • 1970-01-01
    • 2020-07-01
    • 2022-01-05
    • 2013-10-23
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    相关资源
    最近更新 更多