首页 > 解决方案 > 使用启用了 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 请求库结合使用,也不确定如何获得两因素授权来使用它。有没有人这样做过?

非常感谢您的帮助,非常感谢。

标签: pythonapipython-requestswebdavnextcloud

解决方案


您可以通过为单个应用程序生成安全密码来绕过 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.


推荐阅读