微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Python 中使用 ftplib 包进行异常处理

如何解决在 Python 中使用 ftplib 包进行异常处理

我是 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 进行异常处理的最佳做法是什么吗?有什么例子吗?非常感谢。

解决方法

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

FTP 是一个相当古老的协议,它需要客户端向服务器提供凭据。它不适合公共服务器,因此特殊的 ftpanonymous(*) 用户用于匿名日志记录(这对于大多数 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。