如何解决在 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 是一个相当古老的协议,它需要客户端向服务器提供凭据。它不适合公共服务器,因此特殊的 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。