python - 使用启用了 2 因素身份验证的 python 脚本从 nextcloud 下载文件
问题描述
我设置了一个 nextcloud 实例,我想使用 python 脚本从那里下载文件。我的 nextcloud 实例对所有用户强制执行 2 因素身份验证,我希望它保持这种状态。
我的梦想方案是使用该requests
库,因此按照此处的文档https://docs.nextcloud.com/server/15/developer_manual/client_apis/WebDAV/basic.html,我尝试执行以下操作:
from requests.auth import HTTPBasicAuth
r = requests.request(
method='get',
url='https://mycloudinstance/index.php/apps/files/?dir=/Test&fileid=431',
auth=('username', 'pass')
)
print(r.status_code)
print(r.text)
这给了我一个 401 错误,说 {"message":"Current user is not logged in"}。
当我将上述 URL 更改为https://remote.php/dav/myinstance/index.php/apps/files/?dir=/Test&fileid=431我得到
ConnectionError(': 无法建立新连接:[Errno 8] nodename nor servname provided, or not known'))
作为替代方案,我试图尝试使用这个库https://github.com/owncloud/pyocclient只是为了看看我是否可以用它创建一个测试文件夹(它来自owncloud,但也应该与nextcloud一起使用):
import owncloud
oc = owncloud.Client('https://mycloudinstance')
oc.login('username', 'pass')
oc.mkdir('cooldir')
这给我一个owncloud.owncloud.HTTPResponseError: HTTP error: 401
错误。我认为这可能是因为我使用不正确或因为 2-factor auth。
我不确定如何将 webdav 协议与 python 请求库结合使用,也不确定如何获得两因素授权来使用它。有没有人这样做过?
非常感谢您的帮助,非常感谢。
解决方案
您可以通过为单个应用程序生成安全密码来绕过 2 因素身份验证。
In next cloud, go to: Settings -> Personal -> Security -> Create New App Password
The password will be shown to you once (and only once), use it in place of your normal password in your script.
推荐阅读
- xml - 除了使用扩展之外,如何在 XSLT 中处理自定义命名空间?
- python - Odoo 10 收到自定义电子邮件模板渲染错误
- twilio - 如何将 Twilio-Video 房间中的单独视频文件合并为一个?
- python - 在大输入上滑动张量流分类器
- jasper-reports - 在新页面上启动 JasperReport 子报表,但在作为主报表启动时不启动
- html - Iphone7 的非全屏模式下缺少 youtube iframe 视频进度条控件(与 Ipad 一起正常工作)。野生动物园和谷歌浏览器
- excel - Excel VBA:如何在单元格中打印文本(如换行)
- amazon-web-services - 发布到另一个 AWS 账户拥有的 SNS 主题时获取 AuthorizationErrorException
- algorithm - 如何设计一种算法来确定一个字符串中有多少个数字?
- python - 乘法后稀疏矩阵的维数